2015-04-13 3 views
0

Я оцениваю swiftyJSON, сначала попробовав что-то простое, и задаюсь вопросом, в чем проблема с этим циклом.Другое :: Как мне перебирать json-данные с swiftyjson?

Вот пример данных.

{ 
    "dataplot2d": [ 
     [0.25,2.3 ], 
     [-2.5,8.09 ], 
     [5.3145,20.205] 
    ] 
} 

и вот код, чтобы прочитать его на две отдельных массивы

var x:[Float] = [] 
var y:[Float] = [] 
var i:Int = 0 
var t:Int = 0 

var jsonArr = json["dataplot2d"].arrayValue 

for (i=0; i<jsonArr.count; i++)//number of data points 
{ 
    println("i \(i) t \(t) \(jsonArr[i][t])") 
    x.append(jsonArr[i][0].array) 
    y.append(jsonArr[i][1].array) 
} 

Ошибка является Could not find member 'array' ??

array определяется https://github.com/SwiftyJSON/SwiftyJSON для arrayValue

//Non-optional [JSON] 
public var arrayValue: [JSON] { 
    get { 
     return self.array ?? [] 
    } 
} 

Что мне не хватает?

Возможно, это было бы чище без swiftyJSON ??

ответ

1

Примечание: Я преобразуя мой комментарий в ответ, чтобы я могу отправить код.

В коде jsonArr ваш массив первого уровня массивов, так jsonArr[i] массив поплавков и jsonArr[i][0] с плавающей точкой, а не массив. Это было источником путаницы. :)

Что касается простоты кода, вот такой же цикл, как ваш, но со слегка синтаксисом Swift (мне пришлось немного адаптировать код, чтобы он работал на игровой площадке, но он не изменить что-нибудь в нашем деле):

var x:[Float] = [] 
var y:[Float] = [] 

let jsonArr: [[Float]] = [[0.25,2.3 ],[-2.5,8.09 ],[5.3145,20.205]] 

for floatArray in jsonArr { 
    x.append(floatArray[0]) // In your case, floatArray[0].float 
    y.append(floatArray[1]) 
} 
0

Просто необходимо развернуть плавать, слишком плохо, это нигде не документировано.

x.append(jsonArr[i][0].array) 
y.append(jsonArr[i][1].array) 

является

x.append(jsonChart[i][0].float!) 
    y.append(jsonChart[i][1].float!) 
+1

это потому, что 'jsonArr' ваш массив первого уровня массивов, поэтому' jsonArr [я] 'является массивом поплавков, и' jsonArr [я] [0] ' это float, а не массив. :) – Moritz

+0

Спасибо за повтор, очень ценим. Первоначально я думал, что '.array' понадобился, чтобы потянуть массив, а затем назначить значения, сохраняя ссылку на значения в массиве. Но разве нет более простого способа прочитать в массиве и назначить его массиву без необходимости цитировать? –