我不熟悉在java中解析JSON。我有这个JSON字符串:
[
{
"projectId":5,
"userName":"clinician",
"projectName":"r",
"projectSummary":"r",
"projectLanguage":"r",
"contactPersonName":"r",
"contactPersonCV":"r",
"contactPersonEmail":"r",
"contactPersonPhone":"r"
},
[
{
"consentFileId":2,
"projectId":5,
"consentDescription":"r",
"consentFileName":"test.pdf",
"servicePathToGetConsentPdf":null
},
{
"consentFileId":3,
"projectId":5,
"consentDescription":"rrr",
"consentFileName":"test.pdf",
"servicePathToGetConsentPdf":"localhost:8080/4c_viewFile?consentFileId=3"
}
],
[
{
"anonymized_patient_identifier":"r",
"projectId":5
},
{
"anonymized_patient_identifier":"2",
"projectId":5
},
{
"anonymized_patient_identifier":"5",
"projectId":5
}
]
我已经设法从更简单的JSON字符串中获取值,但是这个字符串有多个级别,并且每个级别都没有键。我尝试使用这样的简单代码:
Object obj = parser.parse(data);
JSONObject jsonObject = (JSONObject) obj;
resultJson = (String) jsonObject.get("projectId");
resultJson += "\n";
resultJson += (String) jsonObject.get("userName");
但我收到错误[java.lang.ClassCastException:org.json.simple.JSONArray无法转换为org.json.simple.JSONObject]而且我也不明白我将如何获取值没有钥匙的较低级别。我也尝试将其保存为JSONArray,但它没有用。
答案 0 :(得分:3)
json
的根类型为JSONArray
,
存储在根数组中的第一个对象是一个对象,您可以使用index = 0
来检索它。
这是让您的代码有效的黑客攻击:
JSONArray jsonArray = JSONArray.fromObject(data);
JSONObject jsonObject=obj.getJSONObject(0);
resultJson = (String) jsonObject.get("projectId");
resultJson += "\n";
resultJson += (String) jsonObject.get("userName");
注:
将String转换为JSONArray,您可以这样做:
JSONArray array = JSONArray.fromObject(data);
答案 1 :(得分:1)
为了改进nafas的答案,我会这样做以查看数组中的所有对象:
Object obj = parser.parse(data);
JSONArray jsonArray = (JSONArray) obj;
for (int i = 0; i < jsonArray.size (); i++) {
JSONObject jsonObject=obj.getJSONObject(i);
resultJson = (String) jsonObject.get("projectId");
resultJson += "\n";
resultJson += (String) jsonObject.get("userName");
}