Может ли массив быть объектом JSON верхнего уровня? (в Задаче C, библиотека Стига Браутасета) - PullRequest
2 голосов
/ 31 марта 2012

Я пишу модуль Objective C / iOS для синтаксического анализа текстовых файлов в словарях JSON с использованием библиотеки JSON Стига Браутасета.

Есть ли простой способ разбить один файл JSON на массив объектов словаря, или мне нужно создать один объект словаря и извлечь из него разные объекты?

В качестве фона в настоящее время я использую несколько файлов, по одному на объект. Мои JSON-файлы выглядят примерно так:

{
 "colorname": "red",
 "foos": [
   {
    "type": "cherry",
    "category": "fruit"
   },
   {
    "type": "redvines",
    "category": "bar"
   }
 ]
}

{
 "colorname": "green",
 "foos": [...]
}

{
 "colorname": "blue",
 "foos": [...]
}

и т.д.

Моя функция разбора выглядит следующим образом:

NSMutableArray *fooColors = [[[NSMutableArray alloc] init] autorelease] 

for (NSString *thisFile in fileList) { 
  NSString *entireFile = [NSString stringWithContentsOfFile:thisFile
                              encoding:NSUTF8StringEncoding
                              error:nil];
  NSDictionary *fooList = (NSDictionary*)[entireFile JSONValue];
  [fooColors addObject:dataObject];
}

Но я бы предпочел, чтобы все объекты JSON были в одном файле. Буду ли я делать все это в одном словаре верхнего уровня, как это?

{
 "colors": [
   {
    "colorname": "red",
    "foos": [
      {
       "type": "cherry",
       "category": "fruit"
      },
      {...}
    ]
   },
   {"colorname": "green",
    "foos":[...]
   },
   {"colorname": "blue",
    "foos":[...]
   },
   *etc.*
 ]
}

Есть ли более простой способ обойтись без первых двух и последних двух строк текста JSON и прочитать его как массив объектов словаря? Если так, то как бы выглядела функция синтаксического анализа?

Заранее извиняюсь, если это вопрос новичка.

1 Ответ

1 голос
/ 31 марта 2012

Самый внешний объект в JSON может быть массивом.Это не обязательно должна быть запись / словарь.SBJSON вернет вам NSArray.

[
   {
    "colorname": "red",
    "foos": [
      {
       "type": "cherry",
       "category": "fruit"
      },
      {...}
    ]
   },
   {"colorname": "green",
    "foos":[...]
   },
   {"colorname": "blue",
    "foos":[...]
   },
   *etc.*
 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...