【发布时间】:2021-09-29 00:17:38
【问题描述】:
我有这样的old.JSON 文件:
[{
"id": "333333",
"creation_timestamp": 0,
"type": "MEDICAL",
"owner": "MED.com",
"datafiles": ["stomach.data", "heart.data"]
}]
然后我根据.proto文件创建一个对象:
message Dataset {
string id = 1;
uint64 creation_timestamp = 2;
string type = 3;
string owner = 4;
repeated string datafiles = 6;
}
现在我想保存这个对象,将这个对象保存回其他.JSON 文件。
我这样做了:
import json
from google.protobuf.json_format import MessageToJson
with open("new.json", 'w') as jsfile:
json.dump(MessageToJson(item), jsfile)
结果我有:
"{\n \"id\": \"333333\",\n \"type\": \"MEDICAL\",\n \"owner\": \"MED.com\",\n \"datafiles\": [\n \"stomach.data\",\n \"heart.data\"\n ]\n}"
如何使这个文件看起来像old.JSON 文件?
【问题讨论】:
-
这与原作有何不同?我注意到它不在列表中。是这个问题吗?
-
@tdelaney 是的,它不是一个列表。它有 \" 而不仅仅是 ",并且 \n 是显式的。
-
你试过直接
jsfile.write(MessageToJson(item))吗? -
该列表可能是您最初保存数据的方式。您为列表中的单个
dict定义了消息类型。根据您在此处发布的内容,我不知道您是否为封闭列表定义了另一种消息类型。但是,如果您只是对该外部列表的每个项目进行编码,您就会丢失该列表。至于\n,请尝试打印字符串...它们会呈现为换行符。字符串的 python 表示形式将它们显示为 \n,以便您可以看到它们。 -
@Psidom 有效,但另存为非列表,但我可以手动将
[]添加到文件中。
标签: python json protocol-buffers