2015-04-27 2 views
2

Я работаю над проектом SailsJS и мне нужно создать объект JSON для моего поиска ORM работать, это как поиск должен быть проведенКак создать объект JSON с повторяющимися ключами

Venue.find({ 
      is_published: true, 
      restaurant_services: { 
       contains: '"delivery":"1"', 
       contains: '"takeout":"1"' 
      }, 
      restaurant_specialties: { 
       contains: '"breakfast":"1"', 
      } 
     }).exec 

Так как вы можете видеть, что объект JSON внутри Find() - это тот, который нужно создать, а значения внутри имеют дублирующие ключи.

+2

Не следует ли 'contains' ключ быть объекта, если вы хотите, чтобы формат? –

+3

Это не JSON. Это литерал объекта javascript. JSON - это просто формат seriliazation. Что вы имеете дело с фундаментальной проблемой javascript arround имеют два свойства с тем же именем. Рассматривали ли вы изменение структуры данных на нечто вроде 'restaurant_services: {contains: ['" delivery ":" 1 "', '" takeout ":" 1 "'}}' –

ответ

1

Проблема в том, что {...} Джейсон представляет собой карту и поэтому не может иметь дубликатов ключей. Хотя дублирующиеся ключи строго не являются синтаксическими ошибками, но они также не смогут работать как в браузерах, так и в json-библиотеках. Если вы не можете изменить синтаксис для вашего json-объекта, тогда вам нужно будет создать этот json путем конкатенации строки вместо обычного Javascript-типа.

2

Вы не можете. Вы должны попробовать использовать что-то вроде этого, вместо:

Venue.find({ 
      is_published: true, 
      restaurant_services: { 
       contains: ['"delivery":"1"','"takeout":"1"'] 
      }, 
      restaurant_specialties: { 
       contains: [ '"breakfast":"1"' ] 
      } 
     }).exec 

Или это:

Venue.find({ 
      is_published: true, 
      restaurant_services: { 
       contains: {"delivery":"1","takeout":"1"} 
      }, 
      restaurant_specialties: { 
       contains: { "breakfast":"1" } 
      } 
     }).exec 
+0

Он должен быть 'contains: ['" delivery ":" 1 "," takeout ":" 1 "']', так как это массив, а не объект. Если, разумеется, «сняты». –

+0

Это была моя первая мысль. Тогда я подумал, почему бы не сделать его объектом? Но вы правы, с '' ', это должен быть массив. – bmpasini

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