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"には2つの可能性があります...

  1. 値を持つ文字列"First Name"
  2. 値を持つ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 に答える