本文将分享是否有一个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值并将我指向引用的对象?
- android – nullpointerexception试图从json字符串中获取json数组或json对象
- Android – Retrofit Gson-如何在JSON响应中将JSON字符串解析为JSON键的对象?
- Azure 数据流:从 JSON 字符串中解析嵌套的对象列表 将对象数组解析为字符串数组分解字符串数组解析 JSON 字符串收集解析的对象重新加入原始数据结果
- javascript-是否有内置的jQuery函数将字符串编码为HTML?
是否有一个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.ref
module。
但是,您的服务器应用程序会以某种方式序列化该JSON。不要告诉我它使用的解决方案没有提供反序列化算法!
android – nullpointerexception试图从json字符串中获取json数组或json对象
你好,当我试图从我的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");
解决方法
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键的对象?
{ "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
解决方法
{ "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 数据。到目前为止,我能够使用数据流的“解析”功能解析我的所有数据。但是现在我面临着一个对象列表,我不知道如何解析那个“复杂数组”的值。
我的数据是这样的:
有一些元数据字段(此处为 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。项目应包含复杂对象的列表。
最终的结果应该是这样的:
这是结果,当我加载一个 JSON 文件时,其中 Body 数据未编码,而是包含对象列表的纯 JSON。请注意,这对于原始问题是不可行的,其中 JSON 数据是 Base64 编码的。
当我将示例数据加载到数据流中时,投影看起来像这样(如预期):
首先,我需要解码 Base64 Body 然后我可以解析 JSON 字符串:
解码体在这里完成:
基本解析在这里完成:
如何解析“项目”字段?鉴于数组字段列表中的每个对象都具有相同的架构。
我已经尝试将字段“projects”解析为字符串,并添加另一个解析步骤将此字符串解析为“文档数组”,但结果只是空值..
解决方法
最终的数据流如下所示:
解析必须分成几个部分。
- 首先需要将数组解析为字符串数组
- 必须分解字符串数组
- 现在,可以解析每个数组条目
- 可以回收分解后的数组以获得我想要的结构
- 最后,分解和重新收集的数据可以重新连接到原始数据
将对象数组解析为字符串数组
记住:我要解析的数据是这样的:
{
"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
列中。为了使接下来的步骤更容易,首先将层次结构扁平化。可以为此使用列模式,但我会在这里明确地这样做:
此外,项目列现在更名为 projectsStringArray
分解字符串数组
现在可以使用“展平”步骤分解 projectsStringArray
。
列id
也取到这里,以便以后能够回忆起数组。
结果如下:
解析 JSON 字符串
现在每个字符串都可以像往常一样通过“解析”步骤进行解析
(guid as string,status as string)
收集解析的对象
可以使用“collect”函数再次将解析的对象聚合到列表中。
重新加入原始数据
要获得所需的结构,必须将收集的列连接到原始数据。 id
列可用于将数据连接回来。
结果
最终选择后,结构看起来像所需的:
备注: 感谢来自 Microsoft 的 Erik 的帮助!我太专注于只使用解析步骤来解决它,我没有考虑其他方法来解决这个问题..
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?的相关知识,请在本站寻找。
本文标签: