java - json mapper writerWithDefaultPrettyPrinter 用于由换行符分隔的多个 json 对象

标签 java json jackson

我有多行 json 字符串,由换行符分隔。我使用的是 jackson 版本 1.9.13 例如

{"name":"firstPerson","age":25,"gender":"male"}\n
{"name":"secondPerson","age":30,"gender":"male"}\n
{"name":"thirdPerson","age":25,"gender":"male"}\n
...............

根据使用的操作系统,分隔符可能是\n\r 或\n。基本上它是一个批记录处理,我们将所有内容保存回数据库。但我们也保存了整个请求。

我的要求是在使用 pretty-print 格式时获取多行json对象。请找到代码

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

public class Main {


    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, JsonParseException, IOException {
        //mapper.configure(Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
        //mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
        String json = "{\"name\":\"firstPerson\",\"age\":25,\"gender\":\"male\"}\n{\"name\":\"secondPerson\",\"age\":30,\"gender\":\"male\"}\n{\"name\":\"thirdPerson\",\"age\":25,\"gender\":\"male\"}";
        System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readValue(json, Object.class)));
        System.out.println(json);
    }
}

输出是:

{
 "name" : "firstPerson",
 "age" : 25,
"gender" : "male"
}

但我想显示为:

{
    "name" : "secondPerson",
    "age" : 30,
    "gender" : "male"
  }
{
  "name" : "thirdPerson",
  "age" : 25,
  "gender" : "male"
}
{
  "name" : "firstPerson",
  "age" : 25,
  "gender" : "male"
}

我知道这不是 json 字符串的标准方式。 json 字符串总是包含在 flower brasis 中。但由于它已经是现有系统,我不想破坏系统来更改代码。它可以简单地使用 java 中的任何字符串处理函数来完成,但我需要使用 jackson 和 jackson 的 pretty-print 。 有办法完成这项工作吗?

谢谢, 埃雷什

最佳答案

您的 json 字符串由 3 个 JSON 对象组成,因此您需要一次对它们进行格式化,然后将它们连接起来:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
String json = "{\"name\":\"firstPerson\",\"age\":25,\"gender\":\"male\"}\n{\"name\":\"secondPerson\",\"age\":30,\"gender\":\"male\"}\n{\"name\":\"thirdPerson\",\"age\":25,\"gender\":\"male\"}";
String[] jsons = json.split("\n");
String output = "";

for (String str : jsons) {
    output += objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readValue(str, Object.class)) + "\n";
}

System.out.println(output);

关于java - json mapper writerWithDefaultPrettyPrinter 用于由换行符分隔的多个 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29699373/

相关文章:

java - java转xml和java转json jar的命名约定解释

json - 使用 Jerkson 时维护 JSON 中前导和尾随引号的字符串

java - 如何使用 jackson 将具有 json 值的 Map<String, String> 转换为 POJO?

java - 如何设置Jenkins使用系统的日期,时间,数字和货币格式?

java - 如何判断Android上的行进方向?

android - 如何知道 Android 上的 JSON 中是否存在对象值?

c# - 如何正确获取Json值?

java - 将 Android Activity 与 Google 电子表格连接

java - 以 "?"作为 clown 的字符串搜索?

php - 为什么 json_decode 对我不起作用?