python
中的字典是有顺序的,但是,map
变为 json
发送给前端,那么 json
是无序的。
网上有很多方法,比如 OrderedDict
来构造 json
啥的,最后试了都不行,最终的方案是这样的。
1 2 3 4 5 6 7 8 9 10
| { '法国斗牛犬百科_2444': { '序言_2445': [ '关于我们_2446' ], '演变_2447': [ '法斗历史_2448' ], '样貌_2449': [ '品种_2454', '四肢_2450', '尾巴_2451', '身型_2452', '五官_2453' ], '健康_2460': [], '训练_2461': [] }, '博美_2519': { '博美1_2520': [ '博美文章1_2521' ], '博美2_2522': [] } }
|
变成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [ { 'key': '法国斗牛犬百科_2444', 'value': [ {'key': '序言_2445', 'value': ['关于我们_2446']}, {'key': '演变_2447', 'value': ['法斗历史_2448']}, { 'key': '样貌_2449', 'value': ['品种_2454', '四肢_2450', '尾巴_2451', '身型_2452', '五官_2453'] }, {'key': '健康_2460', 'value': []}, {'key': '训练_2461', 'value': []} ] }, { 'key': '博美_2519', 'value': [ {'key': '博美1_2520', 'value': ['博美文章1_2521']}, {'key': '博美2_2522', 'value': []} ] } ]
|
python 的代码是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| def transform_dict(input_dict): if isinstance(input_dict, dict): transformed = [] for key, value in input_dict.items(): transformed_value = transform_dict(value) transformed.append({ "key": key, "value": transformed_value }) return transformed[0] if len(transformed) == 1 else transformed else: return input_dict
|
js 的解析代码是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| function transformArrayToObject(inputArray) { let result = {}; inputArray.forEach(item => { if (typeof item === 'object' && item !== null && 'key' in item && 'value' in item) { // 检查value是否为数组 if (Array.isArray(item.value)) { // 如果数组中的第一个元素是对象,则递归处理 if (item.value.length > 0 && typeof item.value[0] === 'object') { result[item.key] = transformArrayToObject(item.value); } else { // 否则直接将数组赋给key result[item.key] = item.value; } } else { // 如果value不是数组,直接赋值 result[item.key] = item.value; } } }); return result; }
|
上面的代码都是用 cloud
写的,所以,如果你有其它结构,直接问就行,方案按照我这个方案即可。