MNM MNM - 6 months ago 14
Swift Question

parse embedded json using swiftyjson and swift

So I am trying to parse out this embedded values from this json file using swiftyjson but I cannot figure out how to get the embedded stuff out of the json.

This is what I have so far and it works for getting the upper levels of json out but not for the nested items. The main thing that I need out of this file is the items section for the name and the created values in the items.

if let data = json.dataUsingEncoding(NSUTF8StringEncoding) {
let newJson = JSON(data: data)
myBarcode = newJson["barcode_id"].stringValue
myName = newJson["name"].stringValue
myTotalPointsEarned = newJson["total_points_earned"].stringValue
myPointsEarned = newJson["points_available_to_spend"].stringValue
myRank = newJson["rank"].stringValue
myId = newJson["id"].stringValue
//new json arrary to get the items and dates
var myHistory = newJson["order_history"].arrayValue
print("\n My Hist \n" , myHistory)

//FAIL
//var myItems = newJson["items"].stringValue
//print("\n My Items \n" , myItems)
}


And this is the json file that I am trying to parse

{
"id" : "xxx",
"name" : "xfgsfsdfs",
"total_points_earned" : null,
"points_available_to_spend" : null,
"rank" : null,
"barcode_id" : "C-00000252",
"order_history" : [ {
"items" : [ {
"id" : 284,
"created" : [ 2016, 5, 26, 5, 27, 53 ],
"updated" : [ 2016, 5, 26, 5, 27, 53 ],
"sku" : "10-10-08-050",
"name" : "Halloween stuff",
"description" : "",
"quantity" : 1.0,
"price" : 2000.0,
"total" : 2000.0,
"tax" : null,
"discount" : null
}, {
"id" : 285,
"created" : [ 2016, 5, 26, 5, 27, 53 ],
"updated" : [ 2016, 5, 26, 5, 27, 53 ],
"sku" : "10-22-12-247",
"name" : "More Xmas stuff",
"description" : "",
"quantity" : 1.0,
"price" : 2300.0,
"total" : 2300.0,
"tax" : null,
"discount" : null
}, {
"id" : 286,
"created" : [ 2016, 5, 26, 5, 27, 53 ],
"updated" : [ 2016, 5, 26, 5, 27, 53 ],
"sku" : "10-22-12-249",
"name" : "Xmas stuff",
"description" : "",
"quantity" : 1.0,
"price" : 3700.0,
"total" : 3700.0,
"tax" : null,
"discount" : null
} ],
"items" : [ {
"id" : 288,
"created" : [ 2016, 5, 26, 5, 29, 51 ],
"updated" : [ 2016, 5, 26, 5, 29, 51 ],
"sku" : "JJ-02-00-042",
"name" : "A sample product name",
"description" : "",
"quantity" : 1.0,
"price" : 3000.0,
"total" : 3000.0,
"tax" : null,
"discount" : null
} ]

}
]
}


Thanks for any help with this

Answer

MNM,

You can access items as

var myItems = newJson["order_history"]![0]["items"]!

There is absolutely no need to create seperate json for each keys.