2016-07-28 2 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 может содержать имена полей, которые не являются строками так, что Джексон парсер просто пропустит эти имена полей.

+0

Это зависит? Я знаю в GSON, все ключи должны быть строками – Jeeter

+0

@Jeeter Когда вы говорите «в GSON, все ключи должны быть строками», вы имеете в виду, что «синтаксический анализатор GSON предполагает, что клавиши являются строкой, и будет генерировать исключение, если это не так»? Я строю один, используя библиотеку Джексона, и он также предположил, что ключ будет String, поскольку 'getCurrentName' вернет строку, а не объект, поэтому мне было интересно, как Джексон будет обрабатывать нестроковые имена полей, и если допустимый JSON может содержать не-string fieldname. –

+0

Можете ли вы показать, какой парсер вы используете? Покажите нам, что такое «ключ», как оно объявлено, что его создало. –

ответ

1

Из JSON official website (и по доверенности, то JSON Data Interchange Standard):

enter image description here

При создании объекта, ключ должен быть String.


EDIT: Как @SotiriosDelimanolis отметил в комментариях, это относится только к формату файла JSON, не обязательно один раз разобран через библиотеку Java.

Джексон, например, может десериализации ключи в пользовательские типы - @SotiriosDelimanolis

Смежные вопросы