Python:JSON.dump到结构{key:[key:val]}

Python:JSON.dump到结构{key:[key:val]},python,json,Python,Json,我正在处理一个CSV文件,并试图用JSON.dumps从那里写入JSON文件。我想要的数据结构是 { "key1": {"innerkey1": "value1", … "innerkeyn": "valuen"}, ... ... ... } 然而,JSON.dumps语法似乎要求我编写 json.dumps({"key1": {"innerkey1": "value1", … "innerkeyn": "valuen"}}) 这相当程度上改变了结构的含义(

我正在处理一个CSV文件,并试图用JSON.dumps从那里写入JSON文件。我想要的数据结构是

{
    "key1": {"innerkey1": "value1", … "innerkeyn": "valuen"},
    ...
    ...
    ...
}
然而,JSON.dumps语法似乎要求我编写

json.dumps({"key1": {"innerkey1": "value1", … "innerkeyn": "valuen"}})
这相当程度上改变了结构的含义(并且不是有效的JSON,因为转储是在列表中迭代的)

我猜我不正确地理解了dict语法,但不能完全做到这一点

编辑:编辑以更改大括号类型。问题仍然是为每个项目编写{“key1”…},其中我希望一组hogan大括号环绕整个结构,但是

json.dumps("key1": {"innerkey1": "value1", … "innerkeyn": "valuen"}) 
在分号上引发语法错误

EDIT2:json.dumps被调用n次,每次都写入文件。输出文件如下所示:

{"key1": {"innerkey1": "value1", … "innerkeyn": "valuen"}},
{"key2": {"innerkey1": "value1", … "innerkeyn": "valuen"}}
此语法使JSON期望在第一个封闭Hogan集的末尾使用逗号来表示文件的结尾

{ 
    "key1": {"innerkey1": "value1", … "innerkeyn": "valuen"},
    "key2": {"innerkey1": "value1", … "innerkeyn": "valuen"}
}

通过编辑,您想要一个
key1
来存储多个结果吗

{
    "key1": [{"innerkey1": "value1", … "innerkeyn": "valuen"},
             {"innerkey2": "value1", … "innerkeyn": "valuen"},
             {"innerkey3": "value1", … "innerkeyn": "valuen"}]
}

这有点像是在黑暗中拍摄的。而且是从臀部拍摄的。

看起来你想要
dumps
只为内部键发射部分JSON,我认为你无法做到这一点。我建议你要么传递整个字典(所有顶级键)调用
dumps
,这样它就可以编写整个内容,或者手动处理外部大括号和键,只需对内部字典使用
dumps


或者,您可以按原样使用
json.dumps
,并在写出前去掉开头和结尾的大括号(即只打印出
json[1:-1]
)。

如果我理解正确,您希望在每次迭代中输出一些“部分”json字符串(其本身不是有效的json),例如

但是json.dumps不输出“部分json”,只输出有效的json

因此,要么:

  • 首先将整个文档的所有结果收集在一个dict中,并调用json.dumps一次
  • 或者,写出第一个和最后一个文档括号和
    “key1”:
    部分,并仅对
    {“innerkey1”:“value1”、…“innerkeyn”:“valuen”}
    部分使用json.dumps

您对
key1
的值看起来像一个
dict
,但是您在它周围使用了
list
大括号。所需的数据结构无效。
[]
应该是
{}
{key:[key:val]}应该是
{key:{key:val}
你的第一次
转储如何
没有给你想要的东西?它在多行上运行,所以我得到了{“key1:{…},{“key2”:{…},这使得JSON在第一个逗号处期望EOF。我将使用它和数组切片,这似乎是最好的。请记住,您必须自己处理逗号分隔符。这很好。myfile.write(jsondumps+“,\n”)应该很好是的,同意。接受了tzaman的回答,因为他先回答了。没问题,是这样的。至少你们得到了双方的确认;)
"key1": {"innerkey1": "value1", … "innerkeyn": "valuen"},