Swift 中的特殊 JSON 解析 [关闭]
Posted
技术标签:
【中文标题】Swift 中的特殊 JSON 解析 [关闭]【英文标题】:Special JSON parsing in Swift [closed] 【发布时间】:2016-05-24 22:43:57 【问题描述】:我想构建一个 ios 应用程序,我需要为此 JSON 字符串创建一个仅显示内容的数组:
[ "content":"hello", "content":"hi", "content":"how are you?" ]
结果应该是这样的:
["hello", "hi", "how are you?"]
如何在 Swift 中做到这一点?
这是我在 ViewController.swift 文件中的代码:
import UIKit
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
let mList = "["content":"hello","content":"hi","content":"how are you?"]"
let data = mList!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
【问题讨论】:
在 iOS 和 Swift 中如何解析 JSON 的例子不胜枚举。请做一些基础研究并尝试一下。当您遇到特定实现时,请使用相关代码更新您的问题并解释您遇到的问题。 @rmaddy 感谢您的快速回复!我已经花了几个小时来研究如何做到这一点,但仍然没有得到答案。我的问题是我的 JSON 字符串的开头没有“标题”,我能找到的只是带有“标题”的数组的教程。我也很乐意为网站等提供任何建议,并将努力改进我的问题。 你得到一个包含三个字典的数组,每个字典都有一个键/值对。您想要一个包含三个值的数组。做到这一点,你做了不可思议的事情:编写你自己的代码。实际上是一行。 问题已经解决了。不过还是谢谢你。 【参考方案1】:let mList = "[\"content\":\"hello\",\"content\":\"hi\",\"content\":\"how are you?\"]"
let JSONData = mList.dataUsingEncoding(NSUTF8StringEncoding)!
var json: Array<AnyObject>!
do
json = try NSJSONSerialization.JSONObjectWithData(JSONData, options: NSJSONReadingOptions()) as? Array
catch
print(error)
var resultArray = [String]()
for item in json
if let content = item["content"] as? String
resultArray.append(content)
print("resultArray: \(resultArray)")
【讨论】:
【参考方案2】://: Playground - noun: a place where people can play
import UIKit
var str:String = "[\"xx\",\"yy\",\"zz\"]"
let data = str.dataUsingEncoding(NSUTF8StringEncoding)
do
var jsondata = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as! NSArray
catch
print(error)
(抱歉,示例现在可以在操场上使用)
【讨论】:
谢谢,这段代码有效,但不是我需要的。我只想显示“内容”值(来自我上面问题的 Json 数据)!【参考方案3】:您上面的代码 sn-p 将无法编译,因为您需要转义内部引号。
这就是你想要的:
//: Playground - noun: a place where people can play
import UIKit
import Foundation
func arrayFromJSON(jsonString: String) -> [String]?
if let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
if let array = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as! [[NSObject:AnyObject]]
return array.map $0["content"] as! String
return nil // If the string isn't valid JSON
let jsonString = "[\"content\":\"hello\",\"content\":\"hi\",\"content\":\"how are you?\"]"
print(arrayFromJSON(jsonString))
【讨论】:
我知道应该避免这种情况,但谢谢。这对我很有帮助。 永远不要将 JSON 解码为字符串或从字符串解码。 JSON 总是以数据而不是字符串的形式出现,因此您唯一转换字符串的时候是有人愚蠢地将数据转换为字符串。 “allowLossyConversion”到底在做什么?如果有任何问题,那么转换必须、绝对必须失败。 @gasher729 我不知道有一种方法可以将 json 解码为字符串以外的东西。你会怎么做? @gasher729 请解释为什么您认为永远不应该从字符串中解码 JSON。 JSON 是一种文本格式,因此接受字符串作为输入似乎没有问题,尤其是在编码没有问题的 Swift 中。至于allowLossyConversion: false
,我不确定你的问题是什么,除非这个论点可能是多余的。我会编辑答案。以上是关于Swift 中的特殊 JSON 解析 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章