📅  最后修改于: 2023-12-03 15:30:03.783000             🧑  作者: Mango
在处理 JSON 数据时,往往需要使用 JSON 解析器来将 JSON 字符串转换为对象。但是,JSON 数据经常存在格式不规范的情况,比如:缺少引号、缺少逗号、多余的括号等等。这时候,JSON 解析器就会抛出异常,导致程序执行失败。
例如,在使用 Google Gson 解析 JSON 数据时,可能会遇到以下异常:
com.google.gson.stream.MalformedJsonException:
Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 6 path $
这个异常表示 JSON 数据格式不正确,可以通过设置 JsonReader 的 lenient 属性为 true 来接受格式不规范的 JSON。
以下示例代码演示了如何使用 Google Gson 解析 JSON 数据并处理格式不规范的情况:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.MalformedJsonException;
import java.io.IOException;
import java.io.StringReader;
public class GsonExample {
public static void main(String[] args) {
String json = "{\"name\": \"John\", age: 30, \"city\": \"New York\"}";
Gson gson = new GsonBuilder().create();
try {
// 解析 JSON 数据
MyObject obj = gson.fromJson(json, MyObject.class);
System.out.println(obj);
} catch (MalformedJsonException e) {
// 格式不规范的 JSON 数据
System.out.println("JSON 数据格式不正确:" + e.getMessage());
try {
// 接受格式不规范的 JSON 数据
JsonReader reader = new JsonReader(new StringReader(json));
reader.setLenient(true);
MyObject obj = gson.fromJson(reader, MyObject.class);
System.out.println(obj);
} catch (IOException ex) {
System.out.println("JSON 数据解析失败:" + ex.getMessage());
}
}
}
public static class MyObject {
private String name;
private int age;
private String city;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "MyObject{name='" + name + "', age=" + age + ", city='" + city + "'}";
}
}
}