在没有密钥的情况下在Java中解析JSON字符串

时间:2015-05-12 13:07:36

标签: java json parsing

我不熟悉在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,但它没有用。

2 个答案:

答案 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");
}