2012-05-10 2 views
0

Я использую пакет org.json для разбора JSONArray (у меня есть строки json, сохраненные в базе данных). Однако мне не удается разобрать его, когда один и тот же ключ мог связать String или JSONObject, в зависимости от контекста.JSON: разбор с java и org.json (рекурсия)

Например, см следующий 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 разных типа данных?

ответ

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 
} 
0

Подумайте об этом так в JS или Java дублировать переменное создание под тем же областью является недействительным, так, чтобы избежать AMB iguity помещают их в отдельный объект json с разными именами переменных, прежде чем помещать их в json-массив.