【问题标题】:Poorly formatted json parsing格式错误的 json 解析
【发布时间】:2016-08-09 18:40:11
【问题描述】:

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

        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"
        }
        ]
    } ]
}

【问题讨论】:

  • 你有什么问题?你的问题很清楚。先说清楚
  • 您似乎混淆了 Json 数组和对象。在 Objects 中,您可以通过名称访问属性,在 Arrays 中,您可以通过编号访问元素。
  • 你想从你的候选人数组中得到什么?只有第一个元素?
  • @ShafayatMamun:没错!
  • 好的,然后看看我的答案或 ravi 的答案。它可能会帮助你。

标签: android json parsing


【解决方案1】:

试试这个,看看能不能解决你的问题

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

【讨论】:

  • 我不能说。我需要subtest1,因为它因要求而异。所以,它不是固定值。事实上,我想将subtest1 作为值,因为我无法在回复中知道它。
  • 那么你想检查你的对象中是否存在subset1并获取subset1的值?或者你想要subset1 作为值?像键的名称(subset1/elizabeth)?
  • 查看这个答案 [link]("stackoverflow.com/questions/13573913/…)
  • 我想检查一下,subset1 是否存在。
  • 更新了我的代码。请检查这是否是您要找的东西。
【解决方案2】:

你的解析器应该是这样的。仅供参考 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");
      }
   }
}

【讨论】:

  • 同样的事情......我不能说。我需要subtest1,因为它因请求而异,这不是修复名称。
  • jobj.keys() 你会得到第一个 jsonObject 中的所有键。你可以循环 jsonarray 中的所有 json 对象。
  • subTest 字符串也是空的。我尝试使用我的字符串而不是 subtest1。
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多