2015-06-18 1 views
2

Сейчас у меня есть эта структура в формате JSONКак сделать словарь словарей в JSON?

"Types":[ 
      { 
       "LowCadence":[ 
        { 
        "Reinforcement":"-1", 
        "Weight":"100", 
        "Message":"Pay attention. You're running low cadence. Your cadence is %d steps per minute." 
        } 
       ] 
      }, 
      { 
       "NormalCadence":[ 
        { 
        "Reinforcement":"0", 
        "Weight":"100", 
        "Message":"Great, your cadence is on target. Cadence is %d steps per minute.", 
        "EnforcementSound":"ding" 
        } 
       ] 
      }, 
      { 
       "HighCadence":[ 
        { 
        "Reinforcement":"1", 
        "Weight":"100", 
        "Message":"Slow down. You're running over your planned cadence. Cadence is %d steps per minute." 
        } 
       ] 
      } 
     ] 

Но я хотел бы, чтобы эта структура

enter image description here

Кто-нибудь знает, как написать это в JSON?

ответ

2

Я считаю, что ваш JSON будет выглядеть примерно так:

var Types = { 
    NormalHR: { 
     Reinforcement: 0, 
     Weight: 100, 
     Message: 'Great! Your heart rate is in the zone.', 
     EnforcementSound: 'ding' 
    }, 
    HighHR: { 
     Reinforcement: 1, 
     Weight: 100, 
     Message: 'Slow down. Your heart rate is too high!' 
    }, 
    LowHR: { 
     Reinforcement: -1, 
     Weight: 100, 
     Message: 'Speed up. Low heart rate.' 
    } 
}; 

Как говорит @Balder в своем ответе, вы можете получить доступ к синтаксису использование словаря стиля, как:

  • Types['NormalHR']['Reinforcement']

Вы также можете использовать синтаксис свойство-аксессора, как:

  • Types.NormalHR.Reinforcement

Причина, по которой я не включал «тип» каждого элемента, заключается в том, что вы можете легко сделать вывод, что для buildi нг вашей сетки - следующим образом:

  • typeof Types.NormalHR.Reinforcement (это вернет "number")
  • typeof Types.NormalHR.Message (это вернет "string")

Аналогично, чтобы получить отсчеты - вы можете рассчитывать свойства конкретный объект. В современных браузерах, попробуйте:

  • Object.keys(Types.NormalHR).length (это вернет 2)

Для более старых браузеров, обратитесь к другим методам здесь: How to efficiently count the number of keys/properties of an object in JavaScript?

Надеется, что это помогает!

+0

Благодарим вас за ответ Трой, это не для Интернета, это приложение для iOS –

+0

OK - извините, если я ответил на неправильный вопрос. –

0

У вас нет словарей в json, но у вас есть массивы ключей/значений, которые очень похожи на них.

В вашем коде, если вы хотите получить доступ к:

Нормальной Cadence> Сообщения Вы только должны сделать:

Types["NormalCadence"]["Message"] 

похож на .Net словарь, но это не совсем словарь

+0

Я не верю, что это сработает, поскольку вы используете аксессуар в стиле свойства, чтобы попытаться получить значение из массива. –

+0

Да, потому что после того, как json - это proccess, он становится массивом в javascript – Balder

+0

, на каком языке это? Это Свифт? Я использую Objective-c ... в случае с массивом JSON, я должен разбирать это в словаре, прежде чем я смогу его использовать, что является накладными расходами по plist.также мне было любопытно, можно ли имитировать то же самое с JSON путем форматирования –

2

В объективном C вы можете написать:

NSDictonary *types = @{ 
@"NormalHR": @{ 
    @"Reinforcement": [NSNumber numberWithInt:0], 
    @"Weight": [NSNumber numberWithInt:100], 
    @"Message": @"Great! Your heart rate is in the zone.", 
    @"EnforcementSound": @"ding" 
}, 
@"HighHR": @{ 
    @"Reinforcement": [NSNumber numberWithInt:1], 
    @"Weight": [NSNumber numberWithInt:100], 
    @"Message": @"Slow down. Your heart rate is too high!" 
}, 
@"LowHR": @{ 
    @"Reinforcement": [NSNumber numberWithInt:-1], 
    @"Weight": [NSNumber numberWithInt:100], 
    @"Message": @"Speed up. Low heart rate." 
} 

};

+0

Мне нужен JSON ... так что можно пройти через кросс-платформу –

+1

Итак, правильная структура необходимого json - это один из тех, что есть в Troy Alford. Если вам нужно сериализовать его в NSDictonary, посмотрите здесь: http://stackoverflow.com/a/10121757/1306216 – simone