Python:结构{key:[key:val]}的JSON.dumps

时间:2014-01-22 22:25:10

标签: python json

我正在使用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期望第一个封闭的hogans集合末尾的逗号表示文件结束。所需的输出是

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

3 个答案:

答案 0 :(得分:1)

看起来你希望dumps只为内部键发出部分JSON,我认为你不能让它做到这一点。我建议将整个字典(带有所有顶级键)传递给dumps调用,以便它可以编写整个内容,或者手动处理外部大括号和键,只需使用{{ 1}}用于内部词典。

或者,您可以按原样使用dumps,并在写出之前去除开始和结束括号(即只打印出json.dumps)。

答案 1 :(得分:0)

通过编辑,您希望一个key1存储多个结果?

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

这是在黑暗中的一种射击。从臀部开始。

答案 2 :(得分:0)

如果我理解正确,你想在每次迭代中输出一些'部分'json字符串(它本身不是有效的json),例如。

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

但是json.dumps不输出'partial json',只输出有效的json。

所以,要么:

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