繁体   English   中英

如何使用Java在单个JSON文件中读取多个JSON文档?

[英]How to read multiple JSON docs in single JSON file using Java?

我是JSON的新手,我想使用设备ID读取JSON文档,我在单个文件上有很多文档,就像数据库一样:

   {
      "deviceType":"AccessPoint",
      "transactionType":"response",
      "messageType":"set_config",
      "classes":[
          {
              "deviceType":"AccessPoint",
              "classId":1,
              "ipv4":"192.168.100.100",
              "netmask":"192.168.100.100",
              "ipv6":"192.168.100.100",
              "className":"Interface",
              "interfaceName":"wlan0",
              "state":"UP",
              "type":"wireless",
              "deviceId":"1234",
              "status":"waiting"
          }
       ],
     "deviceId":"1234",
     "transactionId":"201675"
   }

有时,类数组包含多个数组,例如索引[{},{},..]。 因此,如何在Java Web应用程序中使用搜索条件阅读文档。

出于好奇,对Jackson进行了一些操作(流分析器,因为提到了大量元素)。 我只是将其输出为name:value,因此可以在逻辑上进行增强以适合您的口味。 这甚至还没有接近生产,但这是一个好的开始。

import java.io.FileInputStream;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;

public class TestClass {

    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("yourpath/transactions.json")) {
            JsonFactory jf = new JsonFactory();
            JsonParser jp = jf.createParser(fis);
            //System.out.println(JsonToken.START_ARRAY);
            // jp.setCodec(new ObjectMapper());
            jp.nextToken();
            while (jp.hasCurrentToken()) {

                if (jp.getCurrentToken().equals(JsonToken.START_OBJECT)
                        || jp.getCurrentToken().equals(JsonToken.START_ARRAY)
                        || jp.getCurrentToken().equals(JsonToken.END_ARRAY)
                        || jp.getCurrentToken().equals(JsonToken.END_OBJECT)) {
                } else {
                    System.out.print(jp.getText());
                    jp.nextToken();
                    System.out.print(":");
                    System.out.print(jp.getText());
                    System.out.println();
                }
                jp.nextToken();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM