【问题标题】:Read randomly a String from a Json从 Json 中随机读取一个字符串
【发布时间】:2017-01-16 13:44:25
【问题描述】:

我有一个这样的 Json 文件:

{
    9898989,
    7878787,
    1212121,
    2323232,
    4545454,
    3434343
}

现在,我希望 Swift3 代码从 json 文件 (tests_config.json) 中随机读取其中一个 id。

我的代码此时显示如下:

let inputData = try! Data(contentsOf: Bundle(for: type(of: self)).url(forResource: "tests_config", withExtension: "json")!)

let configDictionary = try! JSONSerialization.jsonObject(with: inputData, options: JSONSerialization.ReadingOptions()) as! NSDictionary

当我想调用我使用的函数时:

showDetailsPage(forProductID: configDictionary[ONE OF THE IDs IN THE JSON] as! Int)

【问题讨论】:

  • 首先,这不是有效的 JSON。接下来,您需要一个数组,而不是字典。然后搜索[swift] random array element,你会找到很多解决方案。

标签: json swift3


【解决方案1】:

我假设你有一个 string 内容是这样的:

[
    9898989,
    7878787,
    1212121,
    2323232,
    4545454,
    3434343
]

(否则就不是json字符串)

然后,由于无法直接访问 String 的特定元素,因此您需要将 json string 转换为数组:

let data = string.data(using: .utf8)!
let array = try! JSONSerialization.jsonObject(with: data, options: []) as! [Int]

然后,你随机选择一个元素:

let ONE_OF_THE_IDs = array[Int(arc4random_uniform(UInt32(array.count)))]

(当然,如果您的数据是硬编码的,则仅强制尝试并强制解包,就像您的示例中所示)


[编辑] 如果您已经有一个 array,那么就没有与 JSON 相关的内容了。直接随机选择一个元素:

let myArray = ["2323232", "4545454", "3434343", "7878787"]
let ONE_OF_THE_IDs = Int(myArray[Int(arc4random_uniform(UInt32(myArray.count)))])!

【讨论】:

  • 首先感谢您的帮助。
  • 现在我写了一个这样的数组: 1 let myArray = ["2323232", "4545454", "3434343", "7878787"] 2 let data = string.myArray.data(使用: .utf8)! 3 让数组 = 试试! JSONSerialization.jsonObject(with: data, options: []) as! [Int] 4 let ONE_OF_THE_IDs = array[Int(arc4random_uniform(UInt32(array.count)))] 但现在我在第 2 行有一个错误“使用未解析的标识符‘字符串’。是否可以将第一行放在像“file.data”这样的额外文件,我该如何阅读它。
  • 如果你已经有myArray,你不需要任何json转换。直接选择一个随机值。
  • 谢谢,我已经有数组的版本现在可以正常工作了。只有当我想把它放在一个额外的 Json 文件中是行不通的。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 2012-02-03
  • 2014-12-25
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
相关资源
最近更新 更多