格式不正确的json解析

时间:2016-04-18 06:38:03

标签: android json parsing

我使用上面的代码来解析JSON中的try-catch

        JSONArray jsonRootObject = new JSONArray(text);
        JSONArray jsonArray = jsonRootObject.optJSONArray(2);

        name = jsonArray.toString();
        Toast.makeText(MainActivity.this, name, Toast.LENGTH_LONG).show();

我在下面的代码中使用2作为索引,因为我会从候选人那里获得值。我认为,这很奇怪,因为数组中没有键值对。我想只得到这个数组中的第一个键(在这个例子中是subtest1。),它的值是没有意义的。

{
    "images": [
    {
        "time": 2.86091,
        "transaction":
        {
            "status": "Complete",
            "subject": "test2",
            "confidence": 0.77,
            "gallery_name": "gallerytest1",
        },
        "candidates": [
        {
          "subtest1": "0.802138030529022",
          "enrollment_timestamp": "1416850761"
        },
        {
          "elizabeth": "0.802138030529022",
          "enrollment_timestamp": "1417207485"
        },
        {
          "elizabeth": "0.777253568172455",
          "enrollment_timestamp": "1416518415"
        },
        {
          "elizabeth": "0.777253568172455",
          "enrollment_timestamp": "1416431816"
        }
        ]
    } ]
}

2 个答案:

答案 0 :(得分:2)

试试这个,看看它是否解决了你的问题

 JSONArray CandidatesArr = new JSONArray(jsonRootObject.getString("candidates"));
        JSONObject CandidatesOBJ = CandidatesArr.getJSONObject(0);
String name=CandidatesOBJ.getString("subtest1");

修改

要检查您的密钥子集1是否存在,请尝试以下代码:

String name=""
    if(CandidatesOBJ.has("subtest1")){
name=CandidatesOBJ.getString("subtest1");
    }

答案 1 :(得分:1)

你的解析器应该是.FYI JSONArray没有键值对,但JSONObject没有。

JSONObject root = new JSONObject(text);
JSONArray jarray = root.optJSONArray("images);
if(jarray != null){
   JSONObject jObject = jarray.optJSONObject(0);
   if(jObject != null){
      JSONArray candidates = jObject.optJSONArray("candidates");
      JSONObject jObj = jarray.optJSONObject(0);
      if(jObj != null){
          String subTest =  jObj.optString("subtest1");
      }
   }
}