2015-04-17 346 views
1

我用多行字符分隔多行json字符串。我使用傑克遜版本1.9.13例如json mapper writerWithDefaultPrettyPrinter用於換行的多個json對象

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

定界符可以的\ n \ R或\ n基於使用的操作系統上。基本上它是一個批量記錄處理,我們將所有內容保存回數據庫。但我們也保存整個請求。

我的要求是,當我在prettyprint使用format.Please發現代碼

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); 
    } 
} 
獲得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字符串總是被封閉在花brass中。但因爲它已經存在系統,我不想打破系統來改變代碼。它可以簡單地使用java中的任何字符串處理函數完成,但我需要使用傑克遜和傑克遜漂亮的打印機。 有沒有辦法做到這一點?

感謝, Eresh

回答

1

你的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); 
+0

這就是正確的,我已經做過某事 。但我的問題是有可能json認爲我的json字符串包含一些對象的東西。例如,objectMapper.writerWithDefaultPrettyPrinter()。writeValueAsString(objectMapper.readValue(str,Object []。class))。這樣json mapper會自動地意識到,嘿,我有字符串的對象,而不是單個字符串。雖然我的json字符串有一些發明 – Eresh

-1
String person= "{\"name\":\"firstPerson\",\"age\":25,\"gender\":\"male\"}\n{\"name\":\"secondPerson\",\"age\":30,\"gender\":\"male\"}\n{\"name\":\"thirdPerson\",\"age\":25,\"gender\":\"male\"}"; 

Object json = mapper.readValue(person, Object.class); 
      System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json));