【问题标题】:Extract a word from a string using swift使用 swift 从字符串中提取单词
【发布时间】:2020-06-09 15:14:18
【问题描述】:

我想从这样的字符串中提取一个单词:

"{"photo" : "95.png",
  "other_name" : "othername",
  "name" : "Painting",
  "services" : [],
  "_id" : "id"}"

不,我想从这里提取name: 的值,我该怎么做, 所以就像"name" : " 之后的任何文本都是我要找的词

我试过这样的

let index = onlyName.index(onlyName.index(of: "\"name\"") ?? onlyName.startIndex, offsetBy: 10)
        let mySubstring = onlyName[..<index]

基于this 问题,但onlyName.index(of: "\"name\"") 给我null

我知道我可以将它转换为更容易但需要是字符串的 json

那么我如何获取名称的值,它可能是使用 regx

【问题讨论】:

  • 看起来像json所以先解码成结构或字典
  • 您可以从 json 解码为字符串。
  • 是的,我知道,但它需要是一个字符串,我有一个特定的要求,它需要一个字符串并以这种方式解析单词
  • 它返回 nil @JoakimDanielson
  • 它只是一个常规字符串,此数据是从SwiftyJson 响应返回的,然后我在上面做了rawString(),我返回了 json 对象的字符串化版本

标签: ios swift string substring


【解决方案1】:
"{"photo" : "95.png",
  "other_name" : "othername",
  "name" : "Painting",
  "services" : [],
  "_id" : "id"}"

上面不是有效的Json字符串,如果是下面这样的有效Json字符串:

"{\"photo\" : \"95.png\",
      \"other_name\" : \"othername\",
      \"name\" : \"Painting\",
      \"services\" : [],
      \"_id\" : \"id\"}"

如果您可以拥有有效的 Json 字符串,那么您可以轻松获取任何键的值,即

func dictionaryFromJsonString(_ json: String) -> [String: Any]? {
    if let data = json.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

你可以把它当作

let jsonString = "{\"photo\" : \"95.png\",
  \"other_name\" : \"othername\",
  \"name\" : \"Painting\",
  \"services\" : [],
  \"_id\" : \"id\"}"


if let dictionary = dictionaryFromJsonString(jsonString) {
    print(dictionary["name"])
}

【讨论】:

    【解决方案2】:

    正如上面一些人所建议的,该字符串可能是 json,并且您在代码中的某处引用了它。在这种情况下,您可以简单地将其转换为数据、解码并访问名称:

    struct MyStruct: Codable {
        let name: String
    }
    
    let string = "{\"photo\" : \"95.png\", \"other_name\" : \"othername\", \"name\" : \"Painting\", \"services\" : [], \"_id\" : \"id\"}"
    
    if let data = string.data(using: .utf8),
        let parsed = try? JSONDecoder().decode(MyStruct.self, from: data) {
        print(parsed.name)
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      相关资源
      最近更新 更多