用java解析JSON文件

用java解析JSON文件,java,json,Java,Json,我不熟悉JSON和Java,使用下面的代码,我试图从文本文件中读取JSON数据,但它并没有显示多值数据的结果 任何人请帮助我,让我知道我错在哪里 JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("C:/Users/Desktop/file.json")); JSONObject jsonObject =

我不熟悉JSON和Java,使用下面的代码,我试图从文本文件中读取JSON数据,但它并没有显示多值数据的结果

任何人请帮助我,让我知道我错在哪里

    JSONParser parser = new JSONParser();              
    try {  
     Object obj = parser.parse(new FileReader("C:/Users/Desktop/file.json"));  
     JSONObject jsonObject = (JSONObject) obj;  
     String K1= (String) jsonObject.get("V1");  
     String K2= (String) jsonObject.get("V2"); 



     System.out.println(V1);
      System.out.println(V2);

       JSONArray K3= (JSONArray) jsonObject.get("K3");

       for (Object c : K3)
       {
         System.out.println(c+"");

       }
 } catch ( Exception e){
                 e.printStackTrace();

 }  
}
}


File.json
{"K1":"V1" ,"K2":"V2" ,"K3" : "V3.1 ,V3.2"}
电流输出: V1 V2

预期产量 V1 V2 V3.1 V3.2


如果有任何错误,请告诉我错误在哪里

您可以手动解析,也可以反序列化。我不认为两者都有。现在,您可以进行手动解析。
    JSONParser parser = new JSONParser();              
    try {  
     Object obj = parser.parse(new FileReader("C:/Users/Desktop/file.json"));  
     JSONObject jsonObject = (JSONObject) obj;  
     String K1= (String) jsonObject.get("V1");  
     String K2= (String) jsonObject.get("V2"); 



     System.out.println(V1);
      System.out.println(V2);

       JSONArray K3= (JSONArray) jsonObject.get("K3");

       for (Object c : K3)
       {
         System.out.println(c+"");

       }
 } catch ( Exception e){
                 e.printStackTrace();

 }  
}
}


File.json
{"K1":"V1" ,"K2":"V2" ,"K3" : "V3.1 ,V3.2"}
应该有点像

JSONParser parser=new JSONParser();
String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
Object obj = parser.parse(s);

使用以下示例从文本文件读取数据


使用上述代码段中“sCurrentLine”中的值,而不是代码中“JSON_DATA”变量的硬编码值。

在循环时,一些行应该放在
内,因为循环完成时
sCurrentLine
为空。因此,没有要解析的内容,然后将抛出
NullPointerException
。此外,每一行都应该有这样的模式:
{“Key”:“Value”}

公共类地址{
公共静态void main(字符串[]args)抛出JSONException{
BufferedReader br=null;
试一试{
弦电流线;
br=新的BufferedReader(新的文件阅读器(“C:/Users/Desktop/101.txt”);
而((sCurrentLine=br.readLine())!=null){
System.out.println(sCurrentLine);
最终JSONObject对象=新JSONObject(SCURENTLINE);
最终JSONArray地理数据=obj.getJSONArray(“地理数据”);
final int n=geodata.length();
对于(int i=0;i
我发现以面向对象的方式解析JSON数据更好。这意味着将数据绑定到JavaBean,这对您的工作非常方便。首先让我说这需要一个JAR,即gson.JAR

  • 定义GeoData类以仅表示地理数据

    公共类地理数据{

            private String id;
            private String name;
            private String latitude;
            private String longitude;
            public String getId() {
                return id;
            }
            public void setId(String id) {
                this.id = id;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getLatitude() {
                return latitude;
            }
            public void setLatitude(String latitude) {
                this.latitude = latitude;
            }
            public String getLongitude() {
                return longitude;
            }
            public void setLongitude(String longitude) {
                this.longitude = longitude;
            }
    
        }
    
  • 接下来构建一个包装器,其中包含一个地理数据列表。以匹配您的输入。请注意,您的输入文件具有地理数据键和地理数据列表(您提供的示例)

    最后,这里是解析文件的示例:

    public static void main(String[] args) throws FileNotFoundException {
            //read the file
            JsonReader reader = new JsonReader(new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:\\workspace\\Parser\\geodata.xml")))));
            Gson gson = new Gson();
            GeoDataHolder response = gson.fromJson(reader, GeoDataHolder.class);
            //geodataholder is the root element
            System.out.println("size: " + response.getGeodata().length);
    
            for(int i=0;i<response.getGeodata().length;i++){
                System.out.println("size: " + response.getGeodata()[i].getName());
            }
        }
    
    publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
    //读文件
    JsonReader=新的JsonReader(新的BufferedReader(新的InputStreamReader)(新的文件InputStream(新文件)(“F:\\workspace\\Parser\\geodata.xml”;));
    Gson Gson=新的Gson();
    GeoDataHolder response=gson.fromJson(reader,GeoDataHolder.class);
    //geodataholder是根元素
    System.out.println(“大小:”+response.getGeodata().length);
    
    对于(int i=0;i您实际获得的输出是什么?它是否引发异常?如果是,请在question@Alex,它没有显示任何异常,它给出了完美的答案,但我担心的是,如果我想从JSON文件中读取相同的数据,而不是JSON字符串,那么应该如何在这里执行,我是新手,所以我对谷歌感到困惑它也是但没有得到itA JSON实际上是一个
    字符串
    ,遵循您在问题中已经发布的模式。如果您想从文件中读取它,请使用
    BufferedReader
    或其他东西从文件中读取它,然后对
    JSON\u数据
    字符串
    执行您已经完成的操作。我认为您应该让我们来看一看:@Code的可能副本确实有助于@super hornet,我已经尝试过在线程“main”org.json.JSONException中显示以下errorException:JSONObject文本必须在org.json.JSONTokener.syntaxError(JSONTokener.java:410)org.json.JSONObject的字符1处以“}”结尾。(JSONObject.java:185)位于org.json.JSONObject(JSONObject.java:402)您需要您试图解析@Super Hornet的post文本文件内容。我没有理解您的意思。请解释我指的是
    101.txt
    的内容。好的,如果我错了,请纠正我,这意味着我必须以字符串形式获取内容,然后继续正确操作。我们难道不能读取JSON文件并打印其单个元素,如“Id:1”等吗
    public static void main(String[] args) throws FileNotFoundException {
            //read the file
            JsonReader reader = new JsonReader(new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:\\workspace\\Parser\\geodata.xml")))));
            Gson gson = new Gson();
            GeoDataHolder response = gson.fromJson(reader, GeoDataHolder.class);
            //geodataholder is the root element
            System.out.println("size: " + response.getGeodata().length);
    
            for(int i=0;i<response.getGeodata().length;i++){
                System.out.println("size: " + response.getGeodata()[i].getName());
            }
        }