【问题标题】:JSON: parsing with java and org.json (recursion)JSON:用 java 和 org.json 解析(递归)
【发布时间】:2012-05-10 09:58:43
【问题描述】:

我正在使用包 org.json 来解析 JSONArray(我将 json 字符串保存在数据库中)。但是,当同一个键可能关联一个字符串或 JSONObject 时,我没有成功解析它,具体取决于上下文。

例如,看下面的 JSON 代码...

[ { "cssClass" : "input_text",
    "required" : "undefined",
    "values" : "First Name"
  },
  { "cssClass" : "checkbox",
    "required" : "undefined",
    "title" : "What's on your pizza?",
    "values" : { "2" : { "baseline" : "undefined",
            "value" : "Extra Cheese"
          },
        "3" : { "baseline" : "undefined",
            "value" : "Pepperoni"
          }
      }
   }
]

在上面的代码中,键"values"有2种可能...

  1. 值为"First Name"的字符串
  2. 一个值为{"2":{"value":"Extra Cheese","baseline":"undefined"},"3":{"value":"Pepperoni","baseline":"undefined"}}的JSONObject。

当值可能是 2 种不同的数据类型时,我该如何正确处理?

【问题讨论】:

    标签: java json org.json


    【解决方案1】:

    您可能仍然需要检测它是 JSONObject 还是 String,以便您可以进一步处理它,但也许这里的某些东西可能会有所帮助...

    你可以试试这样的……

    String cssClass = myJson.getString("cssClass");
    if (cssClass.equals("input_text")){
        // Read it as a String
        String values = myJson.getString("values");
    }
    else if (cssClass.equals("checkbox")){
        // Read it as a JSONObject
        JSONObject values = myJson.JSONObject("values");
        // further processing here
    }
    

    或者可能是这样的......

    String cssClass = myJson.getString("cssClass");
    String values = myJson.getString("values");
    
    if (cssClass.equals("input_text")){
        // do nothing - it's already a String
    }
    else if (cssClass.equals("checkbox")){
        // Parse the String into a JSONObject
        JSONObject valuesObject = new JSONObject(values);
        // further processing here
    }
    

    【讨论】:

      【解决方案2】:

      这样认为在js或java中相同作用域下的重复变量创建是无效的,所以为了避免歧义,在将它们放入json数组之前将它们放在具有不同变量名的单独json对象中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 2016-10-17
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        • 2018-09-30
        相关资源
        最近更新 更多