用java解析JSON文件
我不熟悉JSON和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 =
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());
}
}