Некоторые сомнения в отношении двух разных форматов JSON [дубликат]

Если кто-то ищет Linq verson, это работает для меня:

public static IQueryable<BlockVersion> LatestVersionsPerBlock(this IQueryable<BlockVersion> blockVersions)
{
    var max_version_per_id = blockVersions.GroupBy(v => v.BlockId)
        .Select( v => new { BlockId = v.Key, MaxVersion = v.Max(x => x.Version) } );    

    return blockVersions.Where( v => max_version_per_id.Any(x => x.BlockId == v.BlockId && x.MaxVersion == v.Version) );
}
185
задан bluish 16 June 2011 в 08:47
поделиться

5 ответов

Да, вам нужны кавычки. Это упрощает и позволяет избежать использования другого метода escape для зарезервированных ключевых слов javascript, то есть {for:"foo"}.

122
ответ дан cobbal 27 August 2018 в 15:47
поделиться

Из 2.2. Объекты

Структура объекта представлена ​​в виде пары фигурных скобок, окружающих ноль или несколько пар имен / значений (или членов). Имя - это строка.

и от 2.5. Строки

Строка начинается и заканчивается кавычками.

Поэтому я бы сказал, что в соответствии со стандартом: да, вы всегда должны указывать ключ ( хотя некоторые парсеры могут быть более прощающими)

11
ответ дан Cebjyre 27 August 2018 в 15:47
поделиться

Вы правильно используете строки в качестве ключа. Вот отрывок из RFC 4627 - Тип приложения / json Media для нотации объектов JavaScript (JSON)

2.2. Объекты

Структура объекта представлена ​​в виде пары фигурных скобок, окружающих ноль или несколько пар имен / значений (или членов). Имя - это строка. Каждое двоеточие появляется после каждого имени, отделяя имя от значения. Одна запятая отделяет значение от следующего имени. Имена внутри объекта СЛЕДУЕТ быть уникальными.

object = begin-object [ member *( value-separator member ) ] end-object

member = string name-separator value

[...]

2.5. Строки

Представление строк аналогично соглашениям, используемым в семействе языков программирования C. Строка начинается и заканчивается кавычками. [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

Прочитайте весь RFC здесь .

125
ответ дан Keith Thompson 27 August 2018 в 15:47
поделиться

Поскольку вы можете поместить «parent.child» пунктирную нотацию, и вам не нужно помещать родительский [«child»], который также действителен и полезен, я бы сказал, что оба способа являются технически приемлемыми. Парсеры должны делать все в порядке. Если вашему парсеру не нужны кавычки на клавишах, то, вероятно, лучше не ставить их (экономит место). Имеет смысл называть их строками, потому что это то, что они есть, и поскольку квадратные скобки дают вам возможность использовать значения для ключей, по сути, это совершенно бесполезно. В Json вы можете поместить ...

>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};

>obj
Object {someKey: "someValue"}

просто отлично, без проблем, если вам нужно значение для ключа, и ни одно цитируемое не будет работать, поэтому, если это не так, вы не можете , поэтому вы не будете так «вам не нужны кавычки на клавишах». Даже если правильно сказать, что они технически струны. Логика и использование утверждают иначе. Также он официально не выводит Object {"someKey": "someValue"} для obj в нашем примере запускается с консоли любого браузера.

-2
ответ дан Master James 27 August 2018 в 15:47
поделиться

Да, котировки являются обязательными. http://json.org/ говорит:

string
    ""
    " chars "
6
ответ дан user 27 August 2018 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: