2017-05-26 73 views
0

值應該不會有行情JSON對象我有一個JSON它看起來像這樣:構建在使用GSON

{ 
"key1": "value1", 
"key2": "value2", 
"key3": "value3", 
"key4": [{ 
    "key11": { 
     "key21": "value21" 
    } 
}, { 
    "key12": "value12" 
}] 
} 

,並需要得到JSON爲key4每個值。

{ 
"key1": "value1", 
"key2": "value2", 
"key3": "value3", 
"key4": { 
    "key11": { 
     "key21": "value21" 
    } 
} 
} 

{ 
"key1": "value1", 
"key2": "value2", 
"key3": "value3", 
"key4": { 
    "key12": "value12" 
} 
} 

但有我的輸出如下:

{ 
"key1": "value1", 
"key2": "value2", 
"key3": "value3", 
"key4": "{\"key11\": {\"key21\": \"value21\"}}" 
} 

我使用JSON建設者和Java對象轉換成JSON對象。

public class BuildJson { 
    private String key1 = "value1"; 
    private String key2 = "value2"; 
    private String key3 = "value3"; 
    private String key4; 

public BuildJson(String value4) {  
    key4 = value4; 
} 

public String buildJson(BuildJson bj){  
    Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
    String new_json = gson.toJson(bj); 
    return new_json;   
} 
} 

初始化構造函數並調用buildJson方法。

List <String> key4_object; //holds list of values 
for (String i : key4_object){ 
    BuildJson bj = new BuildJson(i); 
    String new_json = bj.buildJson(bj); 
    System.out.print(gson.toJson(new_json)); 
} 

由於key4String型的,它是加上引號和值始終String

如何避免雙引號爲key4

+0

但是,什麼是錯用雙引號呢? –

+0

生成的JSON將作爲對Web請求的響應返回,並且不會正確顯示。而且key4是複雜的嵌套JSON。 – Naive

+0

你只想返回一個複雜的JSON? –

回答

1

通過不使它爲String。這是唯一的方法;不轉義和雙引號String將是一個錯誤的行爲。

問題在於,在所有3種情況下,您在此密鑰下都具有不同結構的JSON,因此不清楚應該使用哪種類型。你可以簡單地讓​​:

public class BuildJson { 
    private String key1 = "value1"; 
    private String key2 = "value2"; 
    private String key3 = "value3"; 
    private JsonElement key4; 

public BuildJson(Object value4) {  
    key4 = new Gson().toJsonTree(value4); 
} 

public String buildJson(){  
    Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
    String new_json = gson.toJson(this); 
    return new_json; 
} 
} 

並假設在key4_objectString s爲JSON你想要的對象,

List<String> key4_object = ...; 
JsonParser parser = new JsonParser(); 
for (String i : key4_object){ 
    BuildJson bj = new BuildJson(parser.parse(i)); 
    String new_json = bj.buildJson(); 
    System.out.print(gson.toJson(new_json)); 
} 
+0

它也逃避引號 – Naive

+0

@Naive你還在'key4_object'的循環中傳遞'String's到它嗎?您需要將它們替換爲會生成所需JSON的對象。目前還不清楚'key4_object'是從哪裏來的,或者它包含了什麼,但我已經在一個假設下編輯了答案。 –

+0

謝謝。使用適當的對象,它的工作。 – Naive