当前位置: 首页 > 面试题库 >

使用python向JSON添加重复密钥

尉迟彬
2023-03-14
问题内容

有没有办法用python向json添加重复键?

据我了解,python词典中不能有重复的键。通常,创建json的方法是先创建字典,然后再创建json.dumps。但是,我需要在JSON中使用重复的键进行测试。但是我不能这样做,因为我不能在python字典中添加重复的键。我正在尝试在python
3中做到这一点


问题答案:

您总是可以手动构造这样的字符串值。

另一方面,可以使 C* Python json模块对重复的密钥进行编码。这在 Python 2中 非常
棘手,因为模块根本不尊重鸭子类型。
*json

直截了当的解决方案是从collections.Mapping- 继承,因为 不是JSON可序列化的” ,所以您不能这样做
MyMapping

下一类尝试将a子类化dict-很好,但是如果json.dumps注意到类型为dict,它会从调用中跳过__len__,并dict直接看到基础-
如果为空,{}则直接输出,因此很明显,如果我们伪造方法,则基础字典一定不能是空的。

喜悦的下一个来源是实际__iter__被调用,它会迭代密钥。对于每个键,__getitem__都会调用,因此我们需要记住给定键返回的对应值是什么…因此,我们得出了一个非常丑陋的Python
2解决方案:

import json
class FakeDict(dict):
    def __init__(self, items):
        # need to have something in the dictionary
        self['something'] = 'something'
        self.items = items

    def __getitem__(self, key):
        return self.last_val

    def __iter__(self):
        subiter = iter(self.items)
        def generator():
            for key, value in self.items:
                self.last_val = value
                yield key

        return generator()

print json.dumps(FakeDict([('a', 5), ('a', 6)]), sort_keys=False)

在CPython
3.3+中,它稍微容易些……不,collections.abc.Mapping不起作用,是的,您需要将a子类化dict,是的,您需要假冒您的字典包含内容…但是内部JSON编码器调用items而不是__iter__and
__getitem__

因此在Python 3上:

import json

class FakeDict(dict):
    def __init__(self, items):
        self['something'] = 'something'
        self._items = items
    def items(self):
        return self._items

print(json.dumps(FakeDict([('a', 1), ('a', 2)])))

打印出来

{"a": 1, "a": 2}


 类似资料:
  • 问题内容: 有没有办法用python向json添加重复键? 根据我的理解,python词典中不能有重复的键。通常,创建json的方法是先创建字典,然后创建。但是,出于测试目的,我需要在JSON中使用重复的键。但是我不能这样做,因为我不能在python字典中添加重复的键。我正在尝试在python 3中做到这一点 问题答案: 您总是可以手动构造这样的字符串值。 另一方面,可以使 C* Python模块

  • 我对Java知之甚少。请帮忙

  • 我试图从swift(issue_id)中向JSON的主体添加一个值,我搜索了所有的地方,但看起来没有人回答我的问题,也没有人问我的问题。我还试图将它添加到params中,但显然失败了。 我知道如何添加参数和标头,但我不知道如何向主体添加值,下面是代码

  • 我已经重定向到网站的主页: 但是如果您键入,则重定向到但我需要立即重定向到

  • 问题内容: 我将json字符串存储到mysql中的文本字段中。插入后,我想更新我的json字符串,并使用jackson json将mysql行ID添加到其中。 我有一个Json格式的Java字符串 我希望添加另一个K / V,而无需编写代码行。 终于有了这个: 我可以将String转换为JsonNode: 想要做这样的事情 然后在mysql中使用新的json字符串在我的文本字段中更新 我做不到 我

  • 我将json字符串存储到MySQL中的文本字段中。插入之后,我希望更新我的json字符串,并使用jackson json将mysql行id添加到其中。 我有一个Json格式的java字符串