Python 在json中组合重复键

Python 在json中组合重复键,python,json,regex,Python,Json,Regex,我有一个json,看起来像这样: { "course1": [ { "courseName": "test", "section": "123", "academicHours": "3", "day1": "1", "room1": "0145 03 1 B 015" } ], "course2": [ { "courseName": "test", "section": "

我有一个json,看起来像这样:

{
  "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"
    }
  ]
}
{
  "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"
    }
  ]
}
我想组合任何块/对象/列表(我不知道它叫什么),它们具有相同的键值。 像这样:

{
  "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"
    }
  ]
}
{
  "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中使用正则表达式实现这一点?或者任何正则表达式查询

此外,我尝试使用
json.dumps()
并从那里开始工作,但由于某种原因,当我将它与任何包含阿拉伯语字符的json一起使用时,它会使整个过程变得异常混乱。 不幸的是,我一直使用正则表达式


感谢您的帮助:)

stdlib
json
提供了一个钩子,允许对具有重复密钥的对象进行解码。这个简单的“扩展”钩子应该适用于您的示例数据:

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)
虽然本手册中没有禁止重复密钥的规定,但首先可能应该避免:

1.1。本文件中使用的公约

关键词“必须”、“不得”、“必需”、“应”、“不得”, 本节中的“应”、“不应”、“建议”、“可”和“可选” 文件应按照[RFC2119]中所述进行解释

  • 物体

    对象结构表示为一对花括号 围绕零个或多个名称/值对(或成员)。一个名字就是一个名字 一串每个名称后面都有一个冒号,用于分隔名称 从价值上来说。一个逗号将一个值与后面的值分隔开 名称对象中的名称应该是唯一的


  • stdlib
    json
    提供了一个钩子,允许对具有重复键的对象进行解码。这个简单的“扩展”钩子应该适用于您的示例数据:

    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)
    
    虽然本手册中没有禁止重复密钥的规定,但首先可能应该避免:

    1.1。本文件中使用的公约

    关键词“必须”、“不得”、“必需”、“应”、“不得”, 本节中的“应”、“不应”、“建议”、“可”和“可选” 文件应按照[RFC2119]中所述进行解释

  • 物体

    对象结构表示为一对花括号 围绕零个或多个名称/值对(或成员)。一个名字就是一个名字 一串每个名称后面都有一个冒号,用于分隔名称 从价值上来说。一个逗号将一个值与后面的值分隔开 名称对象中的名称应该是唯一的


  • 第一个对象是不可能的,一个对象不能有重复的关键点。你确定这不是一个对象数组吗?@Barmar不是不可能的。。很糟糕json@wim我的意思是JSON与可能的对象不对应。我知道你的意思,但你错了@Barmar我制作这个json时使用了一个函数,该函数可以将一些数据从pdf文件转换为json,这就是为什么它是一个糟糕的json。这就是为什么我问这个问题,因为我想修复它。第一个对象是不可能的,一个对象不能有重复的键。你确定这不是一个对象数组吗?@Barmar不是不可能的。。很糟糕json@wim我的意思是JSON与可能的对象不对应。我知道你的意思,但你错了@Barmar我制作这个json时使用了一个函数,该函数可以将一些数据从pdf文件转换为json,这就是为什么它是一个糟糕的json。这就是为什么我问这个问题,因为我想修复它。它确实有效,非常感谢。但问题是,只有使用json.dumps()时,我才能将其保存为字符串。正如我所说,这将搞乱任何包含阿拉伯字符的json。我想我得想办法了。thanksPass
    当您调用
    json.dumps
    时,请确保_ascii=False
    。它确实有效,非常感谢。但问题是,只有使用json.dumps()时,我才能将其保存为字符串。正如我所说,这将搞乱任何包含阿拉伯字符的json。我想我得想办法了。thanksPass
    在调用
    json.dumps
    时,确保_ascii=False