拿到了一份 JSON 的历史数据,需要按规则增减一部分内容,规则比较简单,因为数据不能提供出来,我只能尽可能解释一下。
同级别下,type_class
中定义了 A
、B
、C
等变量当前有效数据位于哪一个集合中,如果A
的值为1
,则同一层级中cache_one
中的A
的键值就是A
的有效数据,如果值为2
,则有效数据是放置在cache_two
中,但如果值为0
,则这个名称的数据会返回为空
,不管它是不是在cache_one
和cache_two
中有数据
用 JSON 的某一个块来举例:
...
"type_class": {
"A": 1,
"B": 2,
"C": 0,
...
"E": 2,
"F": 3
},
"cache_one": {
"A": 55,
"B": 12,
"C": 27,
...
"E":14,
"F": 3
},
"cache_two": {
"A": 32,
"B": 99,
"C": 2
...
"E": 0
},
"cache_three": {
"A": 51
"B": 6,
...
"F": 127
}
...
如果我要返回A
的值,那么就应该是取cache_one
中的A
的值,也就是55
返回B
的值,取cache_two
中的B
值,99
返回C
的值,为空
返回F
的值,取cache_three
中的F
值,127
这套数据的存储大概就是这么个形式。
现在需要对这些数据进行清理,使得最终的输出变为(如果返回的键值为0
,一样需要清理,比如上面的E
,定义在cache_two
中,键值为0
,则最终的输出会把它剔除):
...
"type_class": {
"A": 1,
"B": 1,
"F": 1
},
"cache_one": {
"A": 55
"B": 99,
"F":127
},
"cache_two": {
},
"cache_three": {
}
...
我本以为跑几次循环就能够解决问题了,结果没想到这个 JSON 文件还有多层嵌套,它的形式差不多如下:
(下面出现X
和Y
仅供示意,代表乱七八糟的各种内容,这些内容需要保留)
{
"type_class": {
"A": 1,
"B": 2,
"C": 0,
...
"F": 3
},
"type_one": {
"A": 55,
"B": 12,
"C": 27,
"F": 3
},
"type_two": {
"A": 32,
"B": 99,
"C": 2
},
"type_three": {
"A": 51
"B": 6,
"F": 127
},
"XXXXXX": {
"XXXX": "XXXXXXX",
"YYY": "YYYYY"
},
"YYYY": "YYYYY",
"XXXX": "XXXXXXX",
"history_items": [{
"type_class": {
"A": 1,
"F": 0
},
"type_one": {
"A": 55
},
"type_two": {
"A": 32,
}
"XXXXXX": {
"YYY": "YYYYY"
}
}, {
"type_class": {
"F": 3
},
"type_three": {
"A": 51
"B": 6,
"F": 127
},
"XXXXXX": {
"XXXX": "XXXXXXX",
"YYY": "YYYYY"
},
"YYYY": "YYYYY",
"history_items": [{
"type_class": {
"A": 1,
"B": 2,
"C": 0,
...
"F": 0
},
"type_one": {
"A": 55,
"B": 12,
"C": 27,
"F": 3
},
"type_two": {
"A": 32,
"B": 99,
"C": 2
}
"XXXXXX": {
"XXXX": "XXXXXXX",
"YYY": "YYYYY"
}
}
]
}
]
}
我现在头都大了,这个 JSON 里面大概有上万个type_class
,字典里有数组,数组里又有字典,最深的嵌套层级可能有个十几级,今天折腾了快一天,把我知道的方式都试过了,但最终输出的数据里的type_class
数目和原始数据根本对不上……
求教一个方式……
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.