【问题标题】:How to check same values for the multiple keys in array of json Object?如何检查json对象数组中多个键的相同值?
【发布时间】:2018-03-08 12:09:13
【问题描述】:

我正在使用Swift3 处理日历。我知道可以为不同的键设置相同的值。

我有这个 NSArray 称为 DictionaryJSON 对象:

if parsedData["status"] as! Int == 200 {

    if let Streams = parsedData["data"] as! [AnyObject]? {
       for Stream in Streams {
           print(Stream) 
       }



Stream result: {
"-" = 4;
1 = X;
10 = H;
11 = X;
12 = X;
13 = X;
14 = X;
15 = X;
16 = X;
17 = H;
18 = X;
19 = X;
2 = X;
20 = X;
21 = X;
22 = X;
23 = L;
24 = H;
25 = X;
26 = L;
27 = "-";
28 = "-";
29 = "-";
3 = H;
30 = "-";
4 = X;
5 = X;
6 = X;
7 = X;
8 = X;
9 = X;
H = 4;
L = 2;
X = 20;
blank = "";
classid = id;
classname = " (A)";
stdid = 1;
stdnm = "name"; }

这里 1 到 31 是取决于月份的常量天数。 X H L 分别为叶子、正常叶子和正常。我需要检查 x、h、l 值并获取日期。

但是,我不知道检查值是否相同的逻辑,然后将其值添加到同一个键。

请帮助我。谢谢你

【问题讨论】:

  • 利用 Xcode 的 Playground 的目的 :)
  • 我没听懂。你在说什么。如果不是我的,你能解释清楚吗? @格伦
  • 已经有 x,h,l 值了吧?那么为什么要尝试添加相同的值。你到底想做什么?
  • ^ 是的,你还想做什么?我想建议的是,您应该尝试 Xcode 的 Playground 来实际玩和试验字典、json、数组和其他数据。
  • @ViniApp 是的,X、H、L 值在那里,通过使用这些值,我想要获取日期(键),其中日期具有相同的值。然后我将添加到日历。我将月份-年份传递给服务器,然后他返回该月的日期和假期。我觉得你理解我的问题。

标签: ios json loops swift3 calendar


【解决方案1】:

请检查:

这是您的 JSON 格式

if let streams = parsedData["data"] as! [AnyObject]? {
    for stream in streams {
        let dict = stream as? [AnyHashable: Any]
        print(getValue(key: "H", dict: dict!))
        print(getValue(key: "L", dict: dict!))
        print(getValue(key: "X", dict: dict!))
    }
}

func getValue(key: String, dict: [AnyHashable: Any]) -> [Int] {
    return dict.filter { $0.value as? String == key }.flatMap { Int(String(describing: $0.key)) }
}

以下是字典

let dict = ["-": 4, 1: "X", 10: "H", 11: "X", 12: "X", 13: "X", 14: "X",
           15: "X", 16: "X", 17: "H", 18: "X", 19: "X", 2: "X", 20: "X",
           21: "X", 22: "X", 23: "L", 24: "H", 25: "X", 26: "L", 27: "-",
           28: "-", 29: "-", 3: "H", 30: "-", 4: "X", 5: "X", 6: "X", 7: "X",
           8: "X", 9: "X", "H": 4, "L": 2, "X": 20] as [AnyHashable : Any]

选项1传递密钥并返回日期数组

    print(getValue(key: "H", dict: dict)) //[17, 10, 24, 3]
    print(getValue(key: "L", dict: dict)) //[26, 23]
    print(getValue(key: "X", dict: dict)) //[12, 25, 14, 20, 5, 15, 7, 11, 13, 16, 19, 22, 21, 9, 18, 2, 6, 4, 1, 8]

    func getValue(key: String, dict: [AnyHashable: Any]) -> [Int] {
        return dict.filter { $0.value as? String == key }.flatMap { $0.key as? Int}
    }

选项 2 传递多个键并返回字典,其中包含与每个键关联的日期数组

    print(getValue2(keys: ["H","L","X"], dict: dict))
    //["H": [17, 24, 3, 10], "L": [23, 26], "X": [14, 20, 13, 19, 21, 9, 6, 1, 12, 25, 5, 15, 7, 11, 16, 22, 18, 2, 4, 8]]

    func getValue2(keys: [String], dict: [AnyHashable: Any]) -> [String: [Int]] {
        var returnValue = [String: [Int]]()
        for key in keys {
            returnValue[key] = [Int]()
        }

        dict.forEach {
            if let v = $0.value as? String, returnValue[v] != nil, let k = $0.key as? Int {
                returnValue[v]!.append(k)
            }
        }
        return returnValue
    }

【讨论】:

  • 我收到错误:让 parsedData = try JSONSerialization.jsonObject(with: data!, options:[]) as! [字符串:任何] {打印(解析数据)}。让 dict = parsedData["data"] as! [AnyHashable:Any] ---> 错误是无法将类型“__NSSingleObjectArrayI”(0x109f8adb0)的值转换为“NSDictionary”。
  • 谢谢。你能解释一下我的json吗?如果不是我的。从过去的 4 天开始,我一直在坚持。请帮帮我。
  • ha,对于 Streams 中的流 { print(self.getValue(key: "H", dict: stream as! [AnyHashable : Any])) } 。和打印是:[]
  • 流控制台:{ "-" = 3; 1 = X; 10 = H; 11 = X; 12 = X; 13 = X; 14 = X; 15 = X; 16 = X; 17 = H; 18 = X; 19 = X; 2 = X; 20 = X; 21 = X; 22 = X; 23 = L; 24 = H; 25 = X; 26 = L; 27 = X; 28 = "-"; 29 = "-"; 3 = H; 30 = "-"; 4 = X; 5 = X; 6 = X; 7 = X; 8 = X; 9 = X; H = 4; L = 2; X = 21;空白 = "";类ID = 1;类名=“(A)”;标准标识符 = 11; stdnm = "名称"; }
  • 不,我使用了您更新的答案,但我仍然得到空“[]”,并给我您的电子邮件 ID。
猜你喜欢
  • 2021-12-10
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2021-01-17
  • 2023-03-08
相关资源
最近更新 更多