0

我正在使用该包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"有两种可能性......

  1. 有值的字符串"First Name"
  2. 具有 value 的 JSONObject {"2":{"value":"Extra Cheese","baseline":"undefined"},"3":{"value":"Pepperoni","baseline":"undefined"}}

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

4

2 回答 2

0

您可能仍然需要检测它是 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
}
于 2012-05-10T12:50:26.710 回答
0

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

于 2012-06-11T03:59:21.430 回答