2015-07-29 3 views
0

Это мои данные JSONКак разобрать двухмерную JSON объект в Java

{ 

    "field1" : [ 
     { 
      "key1" : "1", 
      "key2" : "2" 
     }, { 
      "key1" : "1", 
      "key2" : "2", 
      "key3" : "3", 
      "key4" : "4" 
     } 
    ], 
    "field2" : { 
     "key1" : "1", 
     "key2" : "2", 
     "key3" : "3", 
     "key4" : "4", 
     "key5" : "5" 
    }, 
    "field3" : { 
     "key1" : "1" 
    } 
} 

это мой код

JSONParser jsonParser = new JSONParser(); 
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader); 

Set arr = jsonObject.keySet(); 
Iterator iterator = arr.iterator(); 
Collection innerArray = jsonObject.values(); 
Iterator iterator1 = innerArray.iterator(); 
while (iterator.hasNext() && iterator1.hasNext()) { 
    System.out.println("key="+iterator.next().toString()); 
    System.out.println("value="+ iterator1 
      .next().toString()); 
} 

я нужен выход, как этот

field1 
------- 
key1 -->1 

key2 -->2 

field1 
---------- 
key1 -->1 

key2 -->2 

key3 -->3 

key4 -->4 


field2 
-------- 
key1 -->1 

key2 -->2 

key3 -->3 

key4 -->4 

key5 -->5 


field3 
------ 
key1 --> 1 

токовый выход :

key=field3 value={"key1":"1"} 

key=field2 value={"key4":"4","key3":"3","key5":"5","key2":"2","key1":"1"} 

key=field1 value=[{"key2":"2","key1":"1"},{"key4":"4","key3":"3","key2":"2","key1":"1"}] 

Любая идея?

+3

Итак, каков ваш текущий выход? Пока неясно, с какой частью у вас проблемы. –

+1

Возможный дубликат [Как разобрать JSON в Java] (http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java) – zubergu

+0

Извините, iam новичок в stackoverflow. –

ответ

2

Вы можете сделать несколько изменений для печати именно так, как вам нужно ... ниже код должен помочь. Этот код является универсальным и может быть использован для любой структуры JSON ..

static void printRecursive(JSONObject obj) { 
    for(Object key:obj.keySet()) { 

     //System.out.println(obj.get(key.toString()).getClass().getSimpleName()); 
     if(obj.get(key.toString()) instanceof JSONArray) { 
      JSONArray aobj = ((JSONArray)obj.get(key.toString())); 
      System.out.println(key.toString()); 
      for(int i=0;i<aobj.length();i++) { 
       printRecursive(aobj.getJSONObject(i)); 
      } 
     } 
     else 
     if(obj.get(key.toString()) instanceof JSONObject) { 
      System.out.println(key.toString()); 
      printRecursive((JSONObject)obj.get(key.toString())); 
     } 
     else 
      System.out.println(key.toString()+" -> "+obj.get(key.toString())); 
    } 
} 
+0

спасибо nandan, его рабочий штраф –

+0

приветствуются –

1

Вам нужно добавить метод, который можно использовать рекурсивно, чтобы проверить, если значение является JSONObject или JSONArray.

Для примера:

public void outputResultsOfJson(String parentKey, Object obj) { 
    if (obj instanceof JSONObject) { 
     System.out.println(parentKey + " is an Object"); 
     JSONObject jObj = (JSONObject)obj; 
     Iterator<?> keys = jObj.keys(); 
     while (keys.hasNext()) { 
      String key = (String) keys.next(); 
      outputResultsOfJson(key, jObj.get(key)); 
     } 
    } else if (obj instanceof JSONArray) { 
     System.out.println(parentKey + " is an Array"); 
     JSONArray jArr = (JSONArray)obj; 
     for (int i = 0; i < jArr.length(); i++) { 
      outputResultsOfJson("#" + i, jArr.get(i)); 
     } 
    } else { 
     System.out.println(parentKey + " is a String"); 
    } 
} 

Эта функция будет проверять тип каждого ключа в объекте или индекса в массиве и вывода его типа (Object, Array, или строка). Адаптируйте его к вашим потребностям.

Смежные вопросы