繁体   English   中英

在iOS Swift中从此json提取字符串值

[英]Extracting string values from this json in IOS swift

我正在使用swiftyjson提取json,但无法提取规范内的标签和值的规范json。 我需要它。

((
    {
    code = "NPR 1515";
    description = "With its enhanced power and performance the NPR1515 provides a genuine \"workhorse\" that will take almost anything in its stride.
\nThe full 1500 Watt motor unit packs almost 50% more power than normally required and this power is transmitted to the floor through our long established 150rpm, oil filled, low load, planetary gearbox .
\nThe big advantage of excess power is to provide scope for many additional tasks where the excess power is both advantageous and needed.";
    id = 16;
    name = "Scrubbers & Polisher - NPR 1515";
    specification = "[{\"label\":\"Model No\",\"value\":\"PR 1515\\t\\t\\r\"},{\"label\":\"\\nMotor\",\"value\":\"500W\\t\\r\"},{\"label\":\"\\nPad\",\"value\":\"00mm\\t\\r\"},{\"label\":\"\\nPower\",\"value\":\"30V AC 50Hz\\r\"},{\"label\":\"\\nBrush\",\"value\":\"50mm\\t\\r\"},{\"label\":\"\\nSpeed\",\"value\":\"50 rpm\\r\"},{\"label\":\"\\nVacuum\",\"value\":\"T130\\t\\r\"},{\"label\":\"\\nRange\",\"value\":\"2m\\t\\t\\r\"},{\"label\":\"\\nWeight\",\"value\":\"0 Kgs\\t\\r\"},{\"label\":\"\\nSize\",\"value\":\"185 x 580x 450mm\"}]";
    "video_url" = "<null>";
}
))

let json2 = JSON(data3!)
for (index, object) in json2 {
let name = object["name"].stringValue
let code = object["code"].stringValue
let description = object["description"].stringValue
let specification = object["specification"].stringValue

不运行此部分。

let json3 = JSON(specification)


                for (index, object3) in json3 {
                    println("in this loop")
                    if let specification2 = object3["label"].string {
                        println(specification2)
                    }
                    else {
                        println(object3["label"].error)
                    }

                    let specification3 = object3["value"].stringValue

                    println(specification3)
                }

好的现在它正在工作,但是标签不能在标签中打印,而它们正在println中工作,但是如果我这样做,则此值有效,但标签不起作用。

  let str = self.labelArray[i]
                    let label8 = UILabel(frame: CGRectMake(2, 0, 0, 0))
                    label8.backgroundColor = UIColor.whiteColor()
                    label8.textColor =         UIColor.blackColor().colorWithAlphaComponent(0.7)
                    label8.frame = CGRect(x: 10, y: setheight , width: screenWidth/2, height: 25)
                    label8.textAlignment = NSTextAlignment.Left
                    label8.text = str
                    self.scrollview_add.addSubview(label8)

                    var label7 = UILabel(frame: CGRectMake(2, 0, 0, 0))
                    label7.backgroundColor = UIColor.whiteColor()
                    label7.textColor = UIColor.blackColor().colorWithAlphaComponent(0.7)
                    label7.frame = CGRect(x: screenWidth/2, y: setheight , width: screenWidth/2, height: 25)
                    label7.textAlignment = NSTextAlignment.Right
                    label7.text = self.valueArray[i]
                    self.scrollview_add.addSubview(label7)

                    setheight += 25

根据您发布的数据结构,“规范”中的值是一个字符串,而不是JSON对象。 有两种方法可以正确执行此操作:

1,正确格式化JSON数据,即代替字符串,“规范”也应该是一个JSON对象(带有字典的数组),具体取决于您从何处获得此JSON数据,您需要修改此数据的生成逻辑为此。

2,您可以使用JSON解析器手动解析规范,例如:

let error: NSErrorPointer = nil;
let specificationString = "[{\"label\":\"Model No\",\"value\":\"PR 1515\\t\\t\\r\"},{\"label\":\"\\nMotor\",\"value\":\"500W\\t\\r\"},{\"label\":\"\\nPad\",\"value\":\"00mm\\t\\r\"},{\"label\":\"\\nPower\",\"value\":\"30V AC 50Hz\\r\"},{\"label\":\"\\nBrush\",\"value\":\"50mm\\t\\r\"},{\"label\":\"\\nSpeed\",\"value\":\"50 rpm\\r\"},{\"label\":\"\\nVacuum\",\"value\":\"T130\\t\\r\"},{\"label\":\"\\nRange\",\"value\":\"2m\\t\\t\\r\"},{\"label\":\"\\nWeight\",\"value\":\"0 Kgs\\t\\r\"},{\"label\":\"\\nSize\",\"value\":\"185 x 580x 450mm\"}]"

if let specificationData = specificationString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) {
    let specificationObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(specificationData, options: .MutableContainers, error: error)

    //Now you have a correct Array, do whatever you want with it.

}

正如您在specification的问题值中张贴的那样,它是一个字符串,因此首先您必须将其转换为NSData然后将其转换为json:

 if let jsonData = specification.dataUsingEncoding(NSUTF8StringEncoding){
      let json = JSON(data:jsonData)

      for (index, object3) in json {
        println("in this loop")
        if let specification2 = object3["label"].string {
          println(specification2)
        }
        else {
          println(object3["label"].error)
        }

        let specification3 = object3["value"].stringValue

        println(specification3)
      }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM