我有一个JSON字符串(jsonString):
["[{"Name":"name.pdf","ValueDate":"2016-08-30T22:00:00+0000"}]"]
jsonString是一个数组,我必须从中检索Name元素 我使用下面的代码:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
System.out.println("jsonString"+ jsonString);
JSONObject jsonObj = new JSONObject();
JSONArray lineItems = jsonObj.getJSONArray(jsonString);
for (Object o : lineItems) {
JSONObject jsonLineItem = (JSONObject) o;
String name = jsonLineItem.getString("Name");
String valueDate = jsonLineItem.getString("ValueDate");
}
但我收到以下错误:
net.sf.json.JSONException:JSONObject [“[\”[{\“Name \”:\“name.pdf \”,\“ValueDate \”:\“2016-08-30T22:00:00 +0000 \“}] \”]“]不是JSONArray at net.sf.json.JSONObject.getJSONArray(JSONObject.java:2038)~ [json-lib-2.4.jar:na]
有人可以帮助我吗?
更新: 我使用了JSONArray lineItems = JSONArray.fromObject(jsonString);超过qxz建议的错误并在代码下方使用循环JSONArray
JSONArray lineItems = JSONArray.fromObject(listDocToSendJson);
for (int i = 0; i < lineItems.size(); i++) {
JSONObject jsonObj = lineItems.getJSONObject(i);
String name = jsonObj.getString("Name");
String valueDate = jsonObj.getString("ValueDate");
}
或
for (Object object : lineItems) {
JSONObject jsonStr = (JSONObject)JSONSerializer.toJSON(object);
System.out.println(" name is --"+jsonStr.get("Name"));
System.out.println(" value is ---"+jsonStr.get("ValueDate"));
}
两者都有错误
net.sf.json.JSONException:JSONArray [0]不是JSONObject。
java.lang.ClassCastException:net.sf.json.JSONArray无法强制转换为net.sf.json.JSONObject
请建议我如何解决此问题。
答案 0 :(得分:0)
要将字符串中的JSON数组转换为JSONArray
,请使用JSONArray.fromObject
:
JSONArray lineItems = JSONArray.fromObject(jsonString); // converts String to JSONArray
for (Object o : lineItems) {
...
}
JSONObject.getJSONArray
用于将JSON对象的给定键检索为数组。
答案 1 :(得分:0)
["[{"Name":"name.pdf","ValueDate":"2016-08-30T22:00:00+0000"}]"]
该字符串不符合JSON语法。
首先删除前导["
并尾随"]
然后它将看起来像正确的JSON数组。
答案 2 :(得分:0)
无效
["[{"Name":"name.pdf","ValueDate":"2016-08-30T22:00:00+0000"}]"]
但是这个有效
[[{"Name":"name.pdf","ValueDate":"2016-08-30T22:00:00+0000"}]]
引用会破坏String的有效性。并且为了解析它,你需要循环两次。
JSONArray lineItems = new JSONArray(listDocToSendJson);
for (int i = 0; i < lineItems.size(); i++) {
JSONArray jsonArr = lineItems.getJSONArray(i);
for (int x = 0; x < jsonArr.size(); x++) {
JSONObject jsonObj = lineItems.getJSONObject(i);
String name = jsonObj.getString("Name");
String valueDate = jsonObj.getString("ValueDate");
}
}
}
答案 3 :(得分:0)
试试这个它应该工作..只是添加你的json字符串有一个问题我已经纠正了它应该作为
[{"Name":"name.pdf","ValueDate":"2016-08-30T22:00:00+0000"}]
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class JSONTest {
public static void main(String[] args) {
String jsonString ="[{\"Name\":\"name.pdf\",\"ValueDate\":\"2016-08-30T22:00:00+0000\"}]";
System.out.println("jsonString" + jsonString);
try {
JSONArray jsonArray = new JSONArray(jsonString);
for (int i=0;i<jsonArray.length();i++) {
JSONObject jsonObj = jsonArray.getJSONObject(i);
String name = jsonObj.getString("Name");
String valueDate = jsonObj.getString("ValueDate");
System.out.println("Name : "+name + "ValueDate : "+valueDate);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 4 :(得分:0)
最后,我能够从JSON字符串中检索元素,如下所示 [&#34; [{\&#34;名称\&#34;:\&#34; name.pdf \&#34; \&#34; ValueDate \&#34;:\&#34; 2016-08-30T22:00:00 + 0000 \&#34;}]&#34;] 我用了json.jar
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
jsonStringList = jsonStringList.substring(2, jsonStringList.length()-2); //removed brackets and double quotes
jsonStringList = jsonStringList.replaceAll("\\\\", ""); //remove extra backslashes
System.out.println("jsonStringList "+jsonStringList); //valid json //[{"Name":"name.pdf","ValueDate":"2016-08-30T22:00:00+0000"}]
try {
JSONArray jsonArray = new JSONArray(jsonStringList);
for (int i=0;i<jsonArray.length();i++) {
JSONObject jsonObj = jsonArray.getJSONObject(i);
String name = jsonObj.getString("Name");
String valueDate = jsonObj.getString("ValueDate");
System.out.println("Name : "+name + "ValueDate : "+valueDate);
}
谢谢大家的帮助。 :)