2016-07-28 10 views
-1

私が知る限り、すべてのJSONフィールド名は文字列値です。しかし、文字列かどうかを調べるためにJSONの "キー"の文字列チェックを行うコードスニペットが発生しました。もしそうでなければ例外をスローします。それは次のようになります:JSONフィールドを文字列にすることはできますか?

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

このチェックは必要ですか?

EDIT:

例えば

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

このコードスニペットは文字列だけですJSONトークンに進行するので、JSONがいるので、文字列でないフィールド名が含まれていることができれば、私は思っていたジャクソンパーサは単にそれらのフィールド名をスキップします。 JSON official website(プロキシによって、JSON Data Interchange Standard)から

+0

それが依存?私はGSONで知っているすべてのキーは文字列でなければなりません – Jeeter

+0

@Jeeter "GSONですべてのキーは文字列でなければなりません"という意味ですか? "GSONパーサーはキーが文字列であると見なし、私はJackson Libraryを使ってビルドしています。また、getCurrentNameはオブジェクトではなく文字列を返すので、キーがStringになると仮定しているようです。そのため、JacksonがString以外のフィールド名を処理する方法が不思議でした。有効なJSONには文字列以外のフィールド名を含めることもできます。 –

+0

使用しているパーサーを表示できますか? 'キーとは何か、それがどのように宣言されたのか、何がそれを創り出したのかを教えてください。 –

答えて

1

:オブジェクトを作成する場合

enter image description here

、キーはStringでなければなりません。


EDIT:@SotiriosDelimanolisはコメントで指摘したように、これが唯一、必ずしも一回のJavaライブラリを解析されていない、JSONファイルの形式に適用されます。

ジャクソンは、例えば、カスタムタイプにキーをデシリアライズすることができます - @SotiriosDelimanolis

関連する問題