结合json中的重复键 [英] combine duplicate keys in json
问题描述
我有一个看起来像这样的json:
i have a json that looks like this:
{
"course1": [
{
"courseName": "test",
"section": "123",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
],
"course2": [
{
"courseName": "test",
"section": "456",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
],
"course2": [
{
"courseName": "test",
"section": "789",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
],
"course2": [
{
"courseName": "test",
"section": "1011",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
],
"course3": [
{
"courseName": "test",
"section": "1213",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
],
"course3": [
{
"courseName": "test",
"section": "1415",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
]
}
并且我想组合任何块/对象/列表(我不知道它叫什么),它们具有相同的键值. 像这样:
and i want to combine any block/object/list (i don't know what it called), that they have the same key value. like this:
{
"course1": [
{
"courseName": "test",
"section": "123",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
],
"course2": [
{
"courseName": "test",
"section": "456",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
},
{
"courseName": "test",
"section": "789",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
},
{
"courseName": "test",
"section": "1011",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
],
"course3": [
{
"courseName": "test",
"section": "1213",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
},
{
"courseName": "test",
"section": "1415",
"academicHours": "3",
"day1": "1",
"room1": "0145 03 1 B 015"
}
]
}
我如何在python中使用正则表达式执行此操作?或任何正则表达式查询?
how can i do this using regular expression in python? or any regular expression query?
此外,我尝试使用json.dumps()
并从那里开始工作,但是由于某些原因,当我将其与包含阿拉伯字符的任何json一起使用时,它会吓跑并弄乱了整个内容.
所以很不幸,我坚持使用正则表达式.
also, i tried to use json.dumps()
and work my way from there but for some reason when i use it with any json that contains Arabic characters it freaks out and messes up the whole thing.
so i'm stuck with regular expression unfortunately.
感谢您的帮助:)
推荐答案
stdlib json
提供了一个钩子,以允许对具有重复键的对象进行解码.这个简单的扩展"挂钩应适用于您的示例数据:
stdlib json
offers a hook to allow decoding objects with duplicate keys. This simple "extend" hook should work for your example data:
def myhook(pairs):
d = {}
for k, v in pairs:
if k not in d:
d[k] = v
else:
d[k] += v
return d
mydata = json.loads(bad_json, object_pairs_hook=myhook)
尽管 JSON规范中没有任何内容,不允许重复的密钥,首先应该避免:
Although there's nothing in the JSON specification to disallow duplicate keys, it SHOULD probably be avoided in the first place:
1.1.本文档中使用的约定
1.1. Conventions Used in This Document
关键字必须",不得",必需",应该",不能", "SHOULD","SHOULD NOT",推荐","MAY"和"OPTIONAL"在此 文档应按照[RFC2119]中的说明进行解释.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
...
-
对象
Objects
对象结构表示为一对大括号 周围零个或多个名称/值对(或成员).名字是一个 细绳.每个名称后都有一个冒号,将名称分开 从价值.单个逗号将值与后跟 姓名.对象中的名称应唯一.
An object structure is represented as a pair of curly brackets surrounding zero or more name/value pairs (or members). A name is a string. A single colon comes after each name, separating the name from the value. A single comma separates a value from a following name. The names within an object SHOULD be unique.
这篇关于结合json中的重复键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!