2016-07-28 37 views
-1

據我所知,所有JSON字段名都是字符串值。但是,我遇到了一個代碼片段,它對JSON的「鍵」進行字符串檢查,看它是否是一個字符串,如果不是,則會引發異常。它類似於:JSON字段不能是字符串嗎?

if (!(key instanceof String)){ 
    throw new exception();} 

是否需要此檢查?

編輯:

例如,

while (jp.nextToken() == JsonToken.FIELD_NAME){ 
    String key = jp.getCurrentName(); 
} 

該代碼段將只發展到JSON令牌是字符串,所以我在想,如果一個JSON可能包含不是字符串,這樣的字段名傑克遜解析器將簡單地跳過這些字段名稱。

+0

這要看?我知道在GSON中,所有密鑰都必須是字符串 – Jeeter

+0

@Jeeter當你說「在GSON中,所有密鑰都必須是字符串」時,你的意思是「GSON解析器假定密鑰是字符串,並且如果不是,則會拋出異常」?我正在使用Jackson Library構建一個,並且它似乎也假設關鍵字是String,因爲'getCurrentName'將返回一個字符串,而不是一個對象,所以我想知道如何Jackson處理非String字段名,如果有效的JSON甚至可以包含非字符串字段名。 –

+0

你可以顯示你正在使用的解析器嗎?向我們展示「關鍵」是什麼,它是如何聲明的以及創建它的。 –

回答

1

JSON official website(和由代理時,JSON Data Interchange Standard):

enter image description here

在創建對象時,密鑰必須是String


編輯:由於@SotiriosDelimanolis在評論中指出,這僅適用於JSON文件的格式,不一定一次通過Java庫解析。

傑克遜,例如,可以反序列化鍵進入自定義類型 - @SotiriosDelimanolis