Как разобрать этот json из файла

#java #json #simplejson

#java #json #simplejson

Вопрос:

Как я могу разобрать этот файл json с помощью SimpleJson lib, формат такой:

Спасибо

мой файл выглядит следующим образом: файл json с массивом Json внутри;

  {"data":[{"host":"hostname1","port":2049,"open":"false", "info":" "},  
 {"host":"hostname1","port":2049,"open":"false", "info":" "}, 
 {"host":"hostname2","port":2049,"open":"false", "info":" "}, 
 {"host":"hostname3","port":2049,"open":"false", "info":" "}, 
 {"host":"hostname4","port":443,"open":"false", "info":" "}, 
 {"host":"hostname5","port":443,"open":"false","info":" "}, 
 {"host":"hostname6","port":61208,"open":"false","info":" "}, 
 {"host":"hostname7","port":139,"open":"false","info":" "}]}  
  

мой код на данный момент:

 JSONParser parser = new JSONParser();
       try {
           Object obj = parser.parse(new FileReader("D:/file.json"));
           JSONArray jsonObject = (JSONArray) obj;
           JSONObject arr = (JSONObject) jsonObject.get(0);
           JSONArray arguments = (JSONArray) arr.get("arguments");
           System.out.println("arguments>>>>>>>>> " arguments);
           for(int i = 0 ; i< arguments.size() ;i  ){
               JSONObject object = (JSONObject) arguments.get(i);
               System.out.println(object);
               return object;
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
     return null;
  

Я сделал вручную вот так:

 //data

           JSONObject obj1 = new JSONObject();
           obj1.put("host", "mkyong.com");
           obj1.put("port", "555");
           obj1.put("open", "false");
           obj1.put("info", "");

           JSONObject obj2 = new JSONObject();
           obj2.put("host", "mkyong.com");
           obj2.put("port", "555");
           obj2.put("open", "false");
           obj2.put("info", "");
           JSONArray list = new JSONArray();
           list.add(obj2);

           JSONObject datajson = new JSONObject();
           datajson.put("data", list);
  

Комментарии:

1. mkyong.com/java/json-simple-example-read-and-write-json

2. Я пробовал это, я хочу прочитать из файла эти простые данные, в будущем я ожидаю огромные данные, которые я не хочу делать вручную.

3. Будь то большой объем данных или этот образец данных, идеи для их чтения остаются теми же. Я не понимаю вашей проблемы.

4. Какие ошибки вы получили при запуске вашего кода? Где ваш код?

5. Плохое название. Перепишите, чтобы обобщить вашу конкретную техническую проблему. Чем ваш вопрос отличается от всех других вопросов о разборе JSON?

Ответ №1:

Похоже, JSON.simple это старая библиотека Google. Я думаю, вам нужно переключиться на GSON . Вот пример кода, который демонстрирует, как читать данное JSON . Ключевым моментом здесь является то, что исходный JSON объект содержит массив JSON объектов в качестве значения key data .

 import java.io.FileReader;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

/**
 *
 * @author blj0011
 */
public class JsonSimpleReaderExample
{
    public static void main(String[] args)
    {
        JSONParser parser = new JSONParser();

        try {
            Object obj = parser.parse(new FileReader("file.json"));
            JSONObject jsonObject = (JSONObject) obj;

            JSONArray array = (JSONArray) jsonObject.get("data");
            Iterator<JSONObject> iterator = array.iterator();
            while (iterator.hasNext()) {
                JSONObject jsonObjectInJsonArray = (JSONObject) iterator.next();
                System.out.println(jsonObjectInJsonArray.get("host"));
            }
        }
        catch (Exception ex) {
            System.out.println(ex.toString());
        }
    }
}
  

Вывод:

 hostname1
hostname1
hostname2
hostname3
hostname4
hostname5
hostname6
hostname7
  

Комментарии:

1. Я не хочу получать данные, я хочу разобрать этот объект как есть, я не хочу использовать GSON, я использую SimpleJson многими способами, я не хочу смешивать обе библиотеки, я сделал это вручную, как это — проверьте post

2. Возможно, вы не знаете, чего хотите. Чтение и синтаксический анализ файла практически идут рука об руку.

3. Я довел вас до этого уровня. Если вы не можете разобраться с этим отсюда, я не знаю, что вам сказать.

4. Я хочу просто сохранить значение файлов внутри объекта json, чтобы использовать для запроса post https, это моя главная цель 🙂

5. Iterator<JSONObject> iterator = array.iterator(); в основном означает начать с первой записи List of JSONObject . В этом случае начните с первого элемента JSONArray of JSONObjects .