2017-07-27 21 views
-2

問題的響應創造了一個串是碼的相關片段:使用同時傑克遜ObjectMapper讀取來自使用同時傑克遜ObjectMapper讀取從一個無效JSON響應</p> <p>這裏創建的字符串與無效JSON

Response response = request.get(); 
String responseAsString = response.readEntity(String.class); 
ObjectMapper mapper = new ObjectMapper(); 
JsonNode responseNode = mapper.readTree(responseAsString); 

當我運行此代碼時,我得到以下例外:com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)): was expecting comma to separate OBJECT entries

問題的背景: 我正在發出GET請求,並且它正在成功響應。然後,我將該響應轉換爲字符串,然後將其更改爲JsonNode並提取我想要的部分。如果我打印出它看起來像這樣的responseAsString:

{ 
    "account": 123456789, 
    "balance": 5602, 
    "dateTime": 2017-06-15T03:29:00, 
    "token": "H77ABC0PPIQ" 
} 

我認爲問題已經到因與因爲不是所有的值作爲字符串發送是如何形成的響應。他們的類型如下:

account: long 
balance: long 
dateTime: DateTime 
token: String 

我不知道如何將響應轉換成一個JSON對象,這樣我可以得到像例如帳號單個值。

任何意見表示讚賞。謝謝!

+1

這是無效的JSON。日期應該用引號括起來。 –

+0

對,也許我錯誤地說了我的問題。當我得到響應並運行toString時,就是我所得到的 - 無效的JSON。我如何使用對象映射器或使其有效JSON?謝謝 – SuperCow

+0

ObjectMapper解析JSON。如果你有什麼不是JSON,那麼它就不能解析它。轉到源代碼並修復您的JSON。或者使用其他能解析這個非JSON的東西。 –

回答

1

問題在於格式錯誤的JSON。您可以使用諸如JSONlint之類的工具來驗證JSON。 你應該檢查你收到的請求的有效載荷是如何被封送的。如果請求中有適當的JSON,你的代碼就可以正常工作。

作爲一個快速測試,我將使用ObjectMapper來序列化,打印,反序列化,然後導航一個帳戶對象。

域類(我使用Lombok爲了簡潔)

@Data 
@AllArgsConstructor 
private class Account { 
    private Integer account; 
    private Integer balance; 
    private String dateTime; 
    private String token; 

} 

測試:

@Test 
public void test() throws IOException { 

    ObjectMapper mapper = new ObjectMapper(); 
    mapper.enable(SerializationFeature.INDENT_OUTPUT); 
    String responseAsString = mapper.writeValueAsString(new Account(123456789,5602,"2017-06-15T03:29:00","H77ABC0PPIQ")); 
    System.out.print(responseAsString); 
    JsonNode responseNode = mapper.readTree(responseAsString); 

    assertEquals("2017-06-15T03:29:00",responseNode.get("dateTime").textValue()); 
} 

JSON通過序列化的帳戶對象產生:

{ 
    "account" : 123456789, 
    "balance" : 5602, 
    "dateTime" : "2017-06-15T03:29:00", 
    "token" : "H77ABC0PPIQ" 
} 
+0

感謝您的回覆。我看到的問題是當您創建新帳戶時,您將如何從我的回覆中獲取新帳戶的參數? – SuperCow