【问题标题】:Parsing JSON String Android [duplicate]解析JSON字符串Android [重复]
【发布时间】:2016-11-03 09:25:27
【问题描述】:

如何解析这样的 JSON 字符串(但我有动态值)

{
 "data":{
         "dynamicValue1":{
                          "serial":"1",
                          "name":"ABC"
                         },
         "dynamicValue2":{
                          "serial":"2",
                          "name":"DEF"
                         },
         "dynamicValue3":{
                          "serial":"3",
                          "name":"GHI"
                         }
         }
}

我之前看到的大多数静态值代码,但我需要帮助,请提前致谢。

【问题讨论】:

  • 澄清一下:在您的 sn-p dynamicValue1 中的节点在您的实际应用程序中是一些随机值吗?
  • 如果您可以控制 JSON 的结构,您应该删除 dynamicValueN 键并将其转换为 JSON 数组。 -- pastebin.com/9ddpP8Lh

标签: android json


【解决方案1】:

我建议使用 JSONObject keys() 获取密钥,然后迭代每个密钥以获取动态值。

根据你的 json 字符串代码必须是这样的:-

//refers to the current element in the array "data"
JSONObject mainObj = new JSONObject(yourString);
JSONObject dynamicValue1 = mainObj.getJSONObject("dynamicValue1");
Iterator key = dynamicValue1.keys();

while(key.hasNext()) {
    // loop to get the dynamic key
    String currentDynamicKey = (String)key.next();

    //get value of the dynamic key
    JSONObject currentDynamicValue = dynamicValue1.getJSONObject(currentDynamicKey);

    // here do something  with the other value...
}

我建议你可以试试这个解决方案。

【讨论】:

    【解决方案2】:

    您可以使用像 Jackson 这样的 JSON 序列化器。

    【讨论】:

      【解决方案3】:

      如果你想手动解析,那么你可以像用户一样使用迭代器..

                      JSONObject mainObj = new JSONObject(yourString);
                      JSONObject dynamicObj = mainObj.getJSONObject("data");
                              jObject = new JSONObject(dynamicObj .toString());
                                      Iterator<?> keys = jObject.keys();
                                      while (keys.hasNext()) {
                                         String key = (String) keys.next();
                                          JSONObject  mainObj=jObject.getJSonOject(key);                              
                                     String serialValue=mainObj.optString("serial")
                                     String nameValue=mainObj.optString("name")
      
                                      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多