GVKun编程网logo

是否有一个Jquery函数可以从解析的JSON字符串中获取#ref id值并将我指向引用的对象?

8

本文将分享是否有一个Jquery函数可以从解析的JSON字符串中获取#refid值并将我指向引用的对象?的详细内容,此外,我们还将为大家带来关于android–nullpointerexception

本文将分享是否有一个Jquery函数可以从解析的JSON字符串中获取#ref id值并将我指向引用的对象?的详细内容,此外,我们还将为大家带来关于android – nullpointerexception试图从json字符串中获取json数组或json对象、Android – Retrofit Gson-如何在JSON响应中将JSON字符串解析为JSON键的对象?、Azure 数据流:从 JSON 字符串中解析嵌套的对象列表 将对象数组解析为字符串数组分解字符串数组解析 JSON 字符串收集解析的对象重新加入原始数据结果、javascript-是否有内置的jQuery函数将字符串编码为HTML?的相关知识,希望对你有所帮助。

本文目录一览:

是否有一个Jquery函数可以从解析的JSON字符串中获取#ref id值并将我指向引用的对象?

是否有一个Jquery函数可以从解析的JSON字符串中获取#ref id值并将我指向引用的对象?

我整个下午都在寻找答案,但我似乎找不到找到完成我所需要的最佳方法。

我的JSON字符串(从Web服务返回)在其中具有循环引用(#ref),它指向字符串中的$ id。现在我知道,如果使用jquery
parseJSON,它将创建javascript对象,并且我可以访问属性la
myObject.MyPropertyName。但是,当我进入#ref时,我不确定如何获取ID指向的对象(我认为该对象是由于反序列化而创建的…

我应该遍历对象及其所有子对象,直到找到它,还是有一种更简单的方法?

$.ajax({        type: "POST",        url: "/Task.asmx/GetTask",        data: "{''id'':''" + ''27'' + "''}",        contentType: "application/json; charset=utf-8",        dataType: "json",        success: function (msg) {            _Data = $.parseJSON(msg.d ? msg.d : msg);            _this.Company = _Data[0].t_Program.t_Company;            _this.Program = _Data[0].t_Program;            _this.Task = _Data[0];        },        complete: function () {        }    });

有问题的区域是_Data [0] .t_Program,因为它不返回对象而是返回

_Data[0].t_Program {...}   $ref: "12"

我不完全知道获取带有$ id“ 12”的对象的最佳方法。根据下面的帖子,看来我应该遍历现有对象,但是我希望有一个做到这一点的jQuery函数…

非常感谢!

答案1

小编典典

不,jQuery本身不具有解决从JSON转换的对象中的循环引用的功能。

我知道的唯一库是Dojo的dojox.json.refmodule。

但是,您的服务器应用程序会以某种方式序列化该JSON。不要告诉我它使用的解决方案没有提供反序列化算法!

android – nullpointerexception试图从json字符串中获取json数组或json对象

android – nullpointerexception试图从json字符串中获取json数组或json对象

参见英文答案 > Android problems with parsing json                                    2个
你好,当我试图从我的jsonString获取一个对象时,我继续得到NPE.我尝试了很多东西甚至改变了我的json一次,但它只是没有用. HTTPResponse工作正常,当我记录“myObject”时,它给出了正确的对象.但是当我试图让对象进入它时,它给了我一个NPE.我测试了json,它是有效的.我也尝试检索一个数组而不是一个对象,但它也提供了一个NPE.有人能告诉我如何解决这个问题.

我做了一个简单的jsontester活动来测试我的json:

public class JSONTester extends Activity {

private DefaultHttpClient createHttpClient() {
    HttpParams my_httpParams = new BasicHttpParams();
    httpconnectionParams.setConnectionTimeout(my_httpParams,3000);
    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(),80));
    ThreadSafeClientConnManager multiThreadedConnectionManager = new ThreadSafeClientConnManager(my_httpParams,registry);
    DefaultHttpClient httpclient = new DefaultHttpClient(multiThreadedConnectionManager,my_httpParams);
    return httpclient;
}

MikeyJSON mJSON;

Button mBtnGo;
TextView mTxt1;
TextView mTxt2;
TextView mTxt3;
TextView mTxt4;
ProgressDialog mProgressDialog;
private String lang;        
private int length;     // 0 - 6 (length 7 to length 12)
private int wordPos;        // 0 - array length

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jsontester);

    mTxt1 = (TextView) findViewById(R.id.txt1);
    mTxt1 = (TextView) findViewById(R.id.txt1);
    mTxt1 = (TextView) findViewById(R.id.txt1);
    mTxt1 = (TextView) findViewById(R.id.txt1);
    mBtnGo = (Button) findViewById(R.id.btnGo);

}

public boolean isNumeric(String str) {

    for(int i=0;i<str.length();i++) {

        if(Character.isDigit(str.charat(i))) {
            return true;
        }
    }
    return false;
}

public void testJSON(View view) {
    if(view==mBtnGo) {

        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setMessage("loading");
        mProgressDialog.show();
        new DownloadNewWords().execute();
    }

}
private class DownloadNewWords extends AsyncTask<Void,Void,Void> {

    int mStatusCode = 0;
    String mResultString;
    Exception mConnectionException;

    @Override
    protected Void doInBackground(Void... args) {

            String fetchUrl = "http://www.mikeywebs.nl/json/jsonexample.html";
            DefaultHttpClient httpclient = createHttpClient();
        HttpGet httpget = new HttpGet(fetchUrl);

        try {
            HttpResponse response = httpclient.execute(httpget);
            StatusLine statusLine = response.getStatusLine();
            mStatusCode  = statusLine.getStatusCode();
                if (mStatusCode == 200){
                mResultString = EntityUtils.toString(response.getEntity());
            }
        } catch (ClientProtocolException e) {
            e.printstacktrace();
            mConnectionException = e;
        } catch (IOException e) {
            e.printstacktrace();
            mConnectionException = e;
        }
        return null;            
    }

        @Override
    protected void onPostExecute(Void arg) {
        mProgressDialog.dismiss();
        if (mStatusCode  == 200){
            mJSON = new MikeyJSON(mResultString);   
            lang = "English";   //Integer.parseInt(langu);
            length = 7;  //Integer.parseInt(wordl);
            wordPos = 0;
            String getWord = mJSON.getResult(lang,length,wordPos);
            mTxt4.setText(getWord);

        }
        else {
            Toast.makeText(JSONTester.this,"Gegevens konden niet worden opgehaald. Controleer uw internetverbinding en probeer het opnieuw (" +mConnectionException.toString() + ")",Toast.LENGTH_LONG).show();
            mJSON = null;
        }
    }
}

}

我使用的jsonclass是:

public class MikeyJSON {

private JSONObject myObject;
private JSONArray jsonArray;

int i;


public MikeyJSON(String jsonString) {
    Log.i("JSON","jsonString: " + jsonString);
    try {
        JSONObject myObject = new JSONObject(jsonString);
        Log.i("JSON","myObject_Object: " + myObject.toString());
    } catch (JSONException e) {
        // Todo Auto-generated catch block
        e.printstacktrace();
    }

}

public String getResult(String lang,int length,int wordPos) {
    String word = "0";  
    //0 is Nederlands 1 is English
    int la = 0;
    if(lang.equals("English")) { 
        la = 1;
    }
    //make String length
    String le = "length" + Integer.toString(length);
    Log.i("PARSE","get_length: " + le);

    //the json
    try {
        jsonArray = myObject.getJSONArray("galgjejson");
        Log.i("JSON","jsonArray: " + jsonArray.toString());
    } catch (JSONException e) {
        // Todo Auto-generated catch block
        e.printstacktrace();
    }

    return word;        
}
}

这是json:

{ "galgjejson" : [
                { "Nederlands" :  [
                                        { "length7" : [ 
                                                            { "word" : "android" },{ "word" : "camping" },{ "word" : "koekjes" }
                                                        ]
                                        }
                                ]   
                },{ "English" : [
                                        { "length7" : [ 
                                                            { "word" : "android" },{ "word" : "koekjes" }
                                                        ]
                                        }
                                ]
                }               
            ]                                               
}

这是日志:

03-18 14:06:23.178: I/JSON(6719): myObject_Object: {"Nederlands":[{"length7":
[{"word":"android"},{"word":"camping"},{"word":"koekjes"}]}]}
03-18 14:06:23.178: I/PARSE(6719): get_length: length7
03-18 14:06:23.178: D/AndroidRuntime(6719): Shutting down VM
03-18 14:06:23.178: W/dalvikvm(6719): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
03-18 14:06:23.207: E/AndroidRuntime(6719): FATAL EXCEPTION: main
03-18 14:06:23.207: E/AndroidRuntime(6719): java.lang.NullPointerException
03-18 14:06:23.207: E/AndroidRuntime(6719):     at me.mikey.my.games.galgjex.MikeyJSON.<init>(MikeyJSON.java:38)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at me.mikey.my.games.galgjex.JSONTester$DownloadNewWords.onPostExecute(JSONTester.java:128)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at me.mikey.my.games.galgjex.JSONTester$DownloadNewWords.onPostExecute(JSONTester.java:1)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at android.os.AsyncTask.finish(AsyncTask.java:631)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at android.os.Looper.loop(Looper.java:137)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at android.app.ActivityThread.main(ActivityThread.java:4745)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at java.lang.reflect.Method.invokeNative(Native Method)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at java.lang.reflect.Method.invoke(Method.java:511)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-18 14:06:23.207: E/AndroidRuntime(6719):     at dalvik.system.NativeStart.main(Native Method)

哦,第38行是:

jsonArray = myObject.getJSONArray("galgjejson");

解决方法

myObject很可能是null,因为你在类中拥有它,然后在mikeyJSON中私有.你应该尝试:

private JSONObject myObject;
private JSONArray jsonArray;

int i;


public MikeyJSON(String jsonString) {
Log.i("JSON","jsonString: " + jsonString);
try {
    myObject = new JSONObject(jsonString);
    Log.i("JSON","myObject_Object: " + myObject.toString());
} catch (JSONException e) {
    // Todo Auto-generated catch block
    e.printstacktrace();
}

}

看看那个JSON我很确定你可以使用构造函数中的字符串而不是JSONObject来创建JSONArray.

编辑的例子.

private JSONArray jsonArray;

int i;

public MikeyJSON(String jsonString) {
try {
    jsonArray = new JSONArray(jsonString);
} catch (JSONException e) {
    // Todo Auto-generated catch block
    e.printstacktrace();
}

}

Android – Retrofit Gson-如何在JSON响应中将JSON字符串解析为JSON键的对象?

Android – Retrofit Gson-如何在JSON响应中将JSON字符串解析为JSON键的对象?

这是我的 JSON响应:

{
      "id": 2,"name": "Test","content": "{\"type\": \"status\",\"text\": \"Lorem ipsum dummy text.\",\"id\": 1}"
}

这些是模型结构:

class TestModel {
    public int id;
    public String name;
    public Content content;
}

class Content {
    public int id;
    public String status;
    public String text;
}

我想使用Retrofit和GsonConvertor将内容的值直接解析到我的Content模型对象中.但是目前,我将其解析为String值,而不是使用Gson.fromJson()转换为我的Content模型对象.是否有任何解决方案可以获得我的预期结果?

当我以前使用GsonConverterFactory解析它时,Retrofit在onFailure方法中给出了回调,但有以下异常:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 4 column 19 path $.data[0].content

解决方法

问题在于JSON响应,它不在 correct JSON format中.“content”字段应该是一个对象,而不是一个字符串:

{
    "id": 2,"content": {
        "type": "status","text": "Lorem ipsum dummy text.","id": 1
    }
}

这将允许gson.fromJson(response,TestModel.class)或带有GsonConverterFactory的RetroFit将您的响应正确解析为相应的对象.

当然,这仅适用于您能够更改正在接收的JSON响应的情况.如果没有,首先要确保控制响应的人知道他们做错了.如果没有任何变化,那么您应该能够通过将TestModel中的内容更改为String来解决此问题:

class TestModel {
    public int id;
    public String name;
    public String content;
}

class Content {
    public int id;
    public String type;
    public String text;
}

然后分别解析每个对象:

TestModel testModel = gson.fromJson(response,TestModel.class);
Content content = gson.fromJson(testModel.content,Content.class);

如果无法更改响应,则另一个选项是为Content对象创建TypeAdapter

public class ContentAdapter extends TypeAdapter<Content> {

    @Override
    public void write(JsonWriter out,Content value) throws IOException {
        // Todo: Writer implementation
    }

    @Override
    public Content read(JsonReader in) throws IOException {
        if(in.peek() != JsonToken.NULL) {
            return fromJson(in.nextString());
        } else {
            in.nextNull();
            return null;
        }
    }

}

然后将TypeAdapter添加到您的GSON实现:

Gson gson = new GsonBuilder()
        .registerTypeAdapter(Content.class,new ContentAdapter()).create();

Azure 数据流:从 JSON 字符串中解析嵌套的对象列表 将对象数组解析为字符串数组分解字符串数组解析 JSON 字符串收集解析的对象重新加入原始数据结果

Azure 数据流:从 JSON 字符串中解析嵌套的对象列表 将对象数组解析为字符串数组分解字符串数组解析 JSON 字符串收集解析的对象重新加入原始数据结果

如何解决Azure 数据流:从 JSON 字符串中解析嵌套的对象列表 将对象数组解析为字符串数组分解字符串数组解析 JSON 字符串收集解析的对象重新加入原始数据结果?

我需要从 Azure 数据流中的字符串解析 JSON 数据。到目前为止,我能够使用数据流的“解析”功能解析我的所有数据。但是现在我面临着一个对象列表,我不知道如何解析那个“复杂数组”的值。

我的数据是这样的:
有一些元数据字段(此处为 null)和 Base64 编码的 Body 字段。每个 JSON 文档都在一个单独的 JSON 文件中。

示例数据:

{
    "Metadata": null,"Body": "eyJpZCI6ICIxIiwgImNvdW50IjogMTIsICJwcm9qZWN0cyI6IFt7Imd1aWQiOiaimTIzMTItMTI0MzE0LTEyNDEtMTIzNCIsICJzdGF0dXMiOiAic3RvcHBlZCJ9LHsiZ3VpZCI6ICJjc2lzdi1uZDkyM24tMTM0MS0yMzQxIiwgInN0YXR1cyI6ICJydW5uaW5nIn1dfQ"
}

为了澄清起见,编码的示例数据如下所示:

{
    "Metadata": null,"Body": "{"id": "1","count": 12,"projects": [{"guid": "12312-124314-1241-1234","status": "stopped"},{"guid": "csisv-nd923n-1341-2341","status": "running"}]}"
}

我的目标是拥有一个包含 Body 数据的镶木地板文件。 所以应该有三列:id、count、projects。项目应包含复杂对象的列表。

最终的结果应该是这样的:

Goal


这是结果,当我加载一个 JSON 文件时,其中 Body 数据未编码,而是包含对象列表的纯 JSON。请注意,这对于原始问题是不可行的,其中 JSON 数据是 Base64 编码的。

当我将示例数据加载到数据流中时,投影看起来像这样(如预期):

projection

首先,我需要解码 Base64 Body 然后我可以解析 JSON 字符串:

data flow

解码体在这里完成:

Decode Body

基本解析在这里完成:

enter image description here

如何解析“项目”字段?鉴于数组字段列表中的每个对象都具有相同的架构。

我已经尝试将字段“projects”解析为字符串,并添加另一个解析步骤将此字符串解析为“文档数组”,但结果只是空值..

parse projects string

result of parse projects

解决方法

最终的数据流如下所示:
FinalDataFlow

解析必须分成几个部分。

  • 首先需要将数组解析为字符串数组
  • 必须分解字符串数组
  • 现在,可以解析每个数组条目
  • 可以回收分解后的数组以获得我想要的结构
  • 最后,分解和重新收集的数据可以重新连接到原始数据

将对象数组解析为字符串数组

记住:我要解析的数据是这样的:

{
    "metadata": null,"Body": "{"id": "1","count": 12,"projects": [{"guid": "12312-124314-1241-1234","status": "stopped"},{"guid": "csisv-nd923n-1341-2341","status": "running"}]}"
}

所以首先我需要解析“Body”列,即 BodyDecoded,因为我首先必须从 Base64 解码。对象数组必须被解析为字符串数组。 因此,解析步骤的“输出列类型”如下所示:

(id as string,count as integer,projects as string[])

值写在 BodyContent 列中。为了使接下来的步骤更容易,首先将层次结构扁平化。可以为此使用列模式,但我会在这里明确地这样做:
FlattenHierachy

此外,项目列现在更名为 projectsStringArray

分解字符串数组

现在可以使用“展平”步骤分解 projectsStringArrayExplodeStringArray

id也取到这里,以便以后能够回忆起数组。

结果如下:
DataAfterExplodeStringArray

解析 JSON 字符串

现在每个字符串都可以像往常一样通过“解析”步骤进行解析

(guid as string,status as string)

收集解析的对象

可以使用“collect”函数再次将解析的对象聚合到列表中。 CollectArray

重新加入原始数据

要获得所需的结构,必须将收集的列连接到原始数据。 id 列可用于将数据连接回来。
Join

结果

最终选择后,结构看起来像所需的:
Finally

备注: 感谢来自 Microsoft 的 Erik 的帮助!我太专注于只使用解析步骤来解决它,我没有考虑其他方法来解决这个问题..

javascript-是否有内置的jQuery函数将字符串编码为HTML?

javascript-是否有内置的jQuery函数将字符串编码为HTML?

是否有内置的jQuery函数将字符串编码为HTML?

我正在尝试将用户键入的文本放入文本框,然后将该文本放入页面的其他区域.我的计划是从文本框中获取.val()并将其提供给< div>的.html().元件.也许有一个不错的jQuery插件可以帮助您解决这个问题(如果它不是内置的),或者总体上可以通过一种更好的方法来实现此目标.

例如,如果用户将< Victory!>在文本框中,我希望页面的另一部分实际显示文本< Victory!>而不是什么都不可见.

最佳答案
代替.html(),请使用.text().将输出放入目标元素时,它将对输出进行编码.这是显示差异的快速演示,请尝试类似“< script>”的示例:http://jsfiddle.net/6WG47/

关于是否有一个Jquery函数可以从解析的JSON字符串中获取#ref id值并将我指向引用的对象?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于android – nullpointerexception试图从json字符串中获取json数组或json对象、Android – Retrofit Gson-如何在JSON响应中将JSON字符串解析为JSON键的对象?、Azure 数据流:从 JSON 字符串中解析嵌套的对象列表 将对象数组解析为字符串数组分解字符串数组解析 JSON 字符串收集解析的对象重新加入原始数据结果、javascript-是否有内置的jQuery函数将字符串编码为HTML?的相关知识,请在本站寻找。

本文标签: