2017-01-15 11 views
0

Я анализирую следующий JSON-файл http://pastebin.com/Mb5E6Ewf с использованием json-simple library в классе Java с именем JacksonStreamExample.Как выполнить поиск в Java внутри объекта JSON для определенного ключа во время разбора JSON

В этом JSON файл У меня есть объект JSON и внутри него массив из 6 объектов JSON со следующей структурой:

{"cells": [{object with name START},{object with name END},{object with name ACTIVITY 1},{object with name ACTIVITY 2},{object with name link},{object with name link}]} 

Я хочу, чтобы искать в этих 6 объектов JSON для wi_name:START и получить wi_displayName этого конкретный объект JSON, но пока в моем коде я получаю только все ключи wi_name этих 6 объектов JSON в итераторе. Можете ли вы сказать мне, как исправить мой код, пожалуйста?

Это код моего класса Java:

package jsontoxml; 

import java.io.*; 

import org.json.simple.parser.JSONParser; 
import org.json.simple.*; 
import java.util.*; 


public class JacksonStreamExample { 

    public static void main(String[] args) { 
     JSONParser parser = new JSONParser(); 
    try { 
     Object obj = parser.parse(new FileReader("text.json")); 
     JSONObject jsonObject = (JSONObject) obj; 

     JSONArray cells = (JSONArray) jsonObject.get("cells"); 
     Iterator<JSONObject> iterator = cells.iterator(); 
     while(iterator.hasNext()){ 

      System.out.println(iterator.next().get("wi_name")); 

     } 

    } catch (Exception e) { 

     e.printStackTrace(); 

    } 

    } 

} 

и выход заключается в следующем:

START 
END 
ACTIVITY_1 
ACTIVITY_2 
null 
null 

ответ

0

Я решить мою проблему, изменив мой код таким образом:

while(iterator.hasNext()){ 
     JSONObject jsonObject2 = (JSONObject) iterator.next(); 
     if(jsonObject2.get("wi_name").equals("START")){ 
       System.out.println(jsonObject2.get("wi_displayName")); 
     } 
    } 
1

Обход JSON с помощью org.json API, как правило, немного неаккуратно, так как ему не хватает совсем все функции комфорта, но здесь вы идете:

while(iterator.hasNext()){ 
    JSONobject current = iterator.next(); 
    if(current.get("wi_name") != null && current.get("wi_name").equals("START")) { 
    // maybe do some null- and/or empty-checks here or what ever you want with the data 
    System.out.println(current.get("wi_displayName"));     
    }; 
} 

Надеюсь, что это поможет!