我有许多 json 对象连接成一个字符串,并且需要解析所有这些对象。简单的例子:
String jsonStr = "{"name":"peter","age":40}{"name":"laura","age":50}"
Run Code Online (Sandbox Code Playgroud)
当使用ObjectMapperjackson 解析这个时,它会正确地找到并读取第一个 json,并删除字符串的其余部分。
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonStr);
System.out.println(rootNode);
Run Code Online (Sandbox Code Playgroud)
给出输出 {"name":"peter","age":20}
有没有办法(在杰克逊或其他框架中)例如返回读取字符的数量,或字符串的其余部分,或JsonNodes的数组?
我在JavaScript和Python 中发现了具有相同目标的问题,建议使用 split by}{或 regex 将其重新格式化为 json 数组,但我仍然希望有一个更优雅的解决方案。
您不需要按照其他人的建议修改您的输入,只需使用以下代码即可。
主要方法
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = new JsonFactory(mapper);
JsonParser parser = factory.createParser(new File("config.json"));
// factory.createParser(String) and many other overload methods
// available, byte[], char[], InputStream etc.
Iterator<Person> persons = parser.readValuesAs(Person.class);
while(persons.hasNext()) {
Person p = persons.next();
System.out.printf("%s: %d%n", p.getName(), p.getAge());
}
}
Run Code Online (Sandbox Code Playgroud)
人物类
public class Person {
private String name;
private int age;
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;
}
}
Run Code Online (Sandbox Code Playgroud)
config.json 文件
{"name":"peter","age":40}{"name":"laura","age":50}
Run Code Online (Sandbox Code Playgroud)
程序输出
peter: 40
laura: 50
Run Code Online (Sandbox Code Playgroud)
使用的库
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |