遍历数组并从 JSON 文件中提取数据

Posted

技术标签:

【中文标题】遍历数组并从 JSON 文件中提取数据【英文标题】:Iterating over arrays and extracting data from JSON file 【发布时间】:2016-06-06 11:40:24 【问题描述】:

这是我从服务器接收的 JSON

Doubt.JSON

我的问题是我收到两个数组类型的“imageData”。我如何提取其中的每一个并将它们分配给集合视图单元格。与第一个 imageData 一样,应该转到一个单元格,然后依次转到下一个单元格。

我正在使用 ALAMOFIRE 和 SWIFTYJSON。如果有人可以帮助我使用/不使用 SwiftyJSON,我将不胜感激。

我的 JSON:


  "response" : 
    "start" : 0,
    "docs" : [
      
        "enrollmentId" : [
          "2534534246"
        ],
        "fieldName2" : [
          "Languages"
        ],
        "locality" : [
          "XYZ"
        ],
        "active" : [
          true
        ],
        "sex" : [
          "Male"
        ],
        "latitude" : [
          1.2340
        ],
        "city" : [
          "udya"
        ],
        "imageData" : [
          "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABkCAYAAAAlg3YKAAA1wklEQVR4AcWd95Nc13XnT+c405MHMyACARDMoCxSibYsrWtXP7h2\/1XXbklea4vyWlW2apUp0SbBIJIgEQaYgMk9nXs\/n\/umgUEgCUis8gN7uvv1fffd+70nn3Mfc3fu3BnHf9IxuXHua76\/\/X5dfRbfeeedr3l4X93dZAJjZpFzKvw3OZcf8fn4e+ppPE6THeeO3\/kxAUsbP+QiH\/l0YsxX\/nF+lBtxnn9++QuP4l94\/VdePnaCOQbLa3LkR+PI8523bFJpokyWJuMAISHhx3Qd1xf4YTwaMXFBEqB8DDkfuTxtvSIhNOn+HjDe2+Pkve81esIPXxtATj+N5z4OaTJOoNfrpVen04n9vf3YvXs3Dvb24sbNm7GxtcUE8lEoFWg5juFwwGsYxWIxSoVClHOFmKrVol7le6kS5y9diHPPXohKvZHwGQp0uie0dIxTAvEYnJM4TBbr5Lkv+2z7Pxugyep4g7wrzpGjQwfnivUHg1i\/cydu81pfX48bN67HzRs3Y8Dkh\/y2v7MXnV4nWRqE79z3\/wOcrF6q09MBWgAAAABJRU5ErkJggg=="
        ],
        "fieldValue2" : [
          "English, Hindi, Kannada"
        ],
        "fieldValue1" : [
          "11 years"
        ],
        "state" : [
          "Karnataka"
        ],
        "id" : "Iuusofijpw",
        "email" : [
          "cont@dontcare.com"
        ],
        "longitude" : [
          12.4352
        ],
        "firstName" : [
          "Praqwer"
        ],
        "_version_" : 1521637513434759168,
        "experience" : [
          10
        ],
        "caseTypes" : [
          "A Particular caseType let's say Bheema",

        ],
        "lastName" : [
          "Bsdtty"
        ],
        "mode" : [
          "Lawyer"
        ],
        "fieldName1" : [
          "Experience"
        ]
      ,
      
        "state" : [
          "Karnataka"
        ],
        "languages" : [
          "English",
          "Hindi",
          "Kannada"
        ],
        "lastName" : [
          "KWE"
        ],
        "firstName" : [
          "RANDARTY"
        ],
        "sex" : [
          "Male"
        ],
        "caseTypes" : [
          "Bheema",

        ],
        "enrollmentId" : [
          "4253646"
        ],
        "mobile" : [
          42534346
        ],
        "id" : "Iurweoin",
        "imageData" : [
          "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABkCAYAAADzJqxvAAAgAElEQVR4XjS9ebBv2VkdtvY+8zm\/8c5vfj2r1VJrQgNEiMkYi0m2kmAbE3DhlAPEqcSuciquVIrgMhCTgF1BQgSMkW0EthkEGCQQIAQCScgSaqk19Ot+3W++872\/8Yz7nL1T6zvP\/Qelbu793XP28H3rW2t9308d3P2iaxEggIdivcBgmCDQPirTwA8UqlIhiDV8pdB0JZz2AevBg4+mrgHTAoHGMElR1DX8MIJvLKzXojMafgg0dQMFwPM9dI2D8g06aHidD4sWjXYAFBLto1WAcw3asoNrLaxSsF0vLKiqrrJc3fu6t12JWqm5qdnbeWJUJF8OipsQ8UJGq6cvVNjU9MWIbHQUeNhbJxGDSYVn0TPQUv4GxJKG0Skpv+tuHWBqbXQ6WSyOjA\/VtRCUqZYrH4UUv2\/ziJ\/f\/aiwX2jbsXKz3ga\/aN+4CG28vb9o27Fys94Gv2jfuAhtvL2\/aNuxcrPeBr\/g2M2m9YyIB6mAAAAABJRU5ErkJggg=="
        ],
        "active" : [
          true
        ],
        "mode" : [
          "Kelsa"
        ],
        "city" : [
          "Udya"
        ],
        "_version_" : 15216,
        "email" : [
          "Him@somenone.com"
        ],
        "experience" : [
          18223
        ],
        "locality" : [
          "XYZ"
        ]
      
    ],
    "numFound" : 2
  ,
  "responseHeader" : 
    "status" : 0,
    "QTime" : 5,
    "params" : 
      "q" : "mode:(\"Lawyer\", \"CA\") AND active:true AND city:(\"Bereello\") AND locality:(\"XYZ\") AND caseTypes:(\"Momerty\")",
      "wt" : "json"
    
  

我的代码:

Alamofire.request(.GET, url!)
    .validate()
    .responseJSON response1 in
        switch response1.result
        case .Success:
            let json33 = JSON(data: response1.data!)

            print(json33)
            if let userDict = json33["response"].dictionary

                if let array = userDict["docs"]?.array

                    for imgd in array

                        let me:String! = imgd["imageData"][0].string

                        let url = NSURL(string: me)!
                        let data = NSData(contentsOfURL: url)!
                        let image = UIImage(data: data)
                        let imgView = UIImageView(image: image!)
                        imgView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
                        self.view.addSubview(imgView)
                    


                

            

【问题讨论】:

这个网站上有很多个类似的问题和答案。看一看。循序渐进:学习如何从 JSON 中提取值。然后学习如何从值中制作图像。然后学习如何制作表格视图。然后学习如何将图像分配给单元格。祝你好运!如果需要,我们会提供帮助。 你好@EricD,MyCode。这就是我一直在做的,我也得到了正确的结果。但是我无法弄清楚何时获得多个“imageData”数组。 :( 【参考方案1】:

您的每个字典都有一个图像文本条目,这些字典位于一个数组中。

我会使用flatMap 快速获取这些图像字符串:

let allImageStrings = json["response"]["docs"].flatMap  $0.1["imageData"].first?.1 

解释:我们遍历 json["response"]["docs"] 并访问元组的第二部分(请记住,SwiftyJSON 对象总是有 (index, value)),然后我们从那里获取第一个元组的第二部分 ["imageData"] .

它看起来很复杂,但是当您查看 JSON 结构时,它实际上是相当清晰的。

【讨论】:

我明白了。但只有一个问题。我将两个字符串都作为一个大字符串。如何根据实际的形象将两者分开? 如果你使用我的例子,你会得到一个包含两个字符串的数组,而不是一个大字符串。 对不起我的英语。我得到一个包含两个字符串的数组。得到后如何将两者分开?因为我必须将它们中的每一个分配给集合视图单元格。 :( 救命稻草。非常感谢!当我开始遇到将它们分配给集合视图单元格的问题时会回来。 啊!别客气。 ;) 是的,如果您遇到困难,请不要犹豫发布一个新问题。

以上是关于遍历数组并从 JSON 文件中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中遍历嵌入的 JSON 数组?

循环遍历指定文件夹中的所有 excel 文件,并从特定单元格中提取数据的代码

循环遍历 JSON 数组

python中如何遍历json数组

在 Shell 脚本中遍历 JSON 数组

使用 swift 2.1 遍历一个 JSON 命名的字典数组