我是JSON的新手,我现在有一个列表,列出了约130个JSON文件,这些文件是通过下载我的Facebook消息数据收到的。我目前正在尝试使用JQ将它们全部连接到一个json文件中,同时保持现有消息顺序不变,但是当我尝试在Windows上输入命令时遇到了错误。我试图按照常见问题解答中针对Windows的建议进行操作,但仍然遇到问题。
所有文件都具有相同的布局
{
"participants": [
{
"name": "Participant One"
},
{
"name": "Participant Two"
}
],
"messages": [
{
"sender_name": "Participant One",
"timestamp_ms": 99999999999,
"content": "message content",
"type": "Generic"
},
{
"sender_name": "Participant Two",
"timestamp_ms": 9999999999,
"content": "message content",
"type": "Generic"
}
],
"title": "chat title",
"is_still_participant": true,
"thread_type": "Regular",
"thread_path": "thread path"
}
如果可以使用JQ,我想将“消息”仅合并到一个JSON文件中,同时保持其现有顺序。这些消息是我出于目的而在意的这些文件中唯一的数据。
-编辑- 非常抱歉,原始帖子中没有详细信息。我尝试了在这里和其他地方都找到的一些命令:
jq -s "[.[][]]" a-*.json > output.json
jq -s "{ attributes: map(.attributes[0]) }" file*.json > output.json
jq -s "*" *.json > output.json
我还尝试将这段代码放入文本文件中,并使用以下方法对其进行符文处理: jq -f文件名 但是我也收到错误
我一直遇到的错误是:
jq: error: Could not open file *.json: Invalid argument
或
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Windows cmd shell quoting issues?) at <top-level>
关于输出的更多细节,我试图实现:我正在使用JQ 1.5。我不关心JSON文件彼此添加的顺序,只要消息保持正确的顺序即可,这样我就可以获得清晰的已定义消息/响应对。我也不在乎是否将所有内容组合在一起,而我必须以其他方式将消息分开。与之类似的东西将是我的理想输出:
"messages": [
{
"sender_name": "Participant One",
"timestamp_ms": 99999999999,
"content": "message content",
"type": "Generic"
},
{
"sender_name": "Participant Two",
"timestamp_ms": 9999999999,
"content": "message content",
"type": "Generic"
},
{
"sender_name": "Participant Three",
"timestamp_ms": 9999999999,
"content": "message content",
"type": "Generic"
},
{
"sender_name": "Participant Two",
"timestamp_ms": 9999999999,
"content": "message content",
"type": "Generic"
}
]
参与者2代表我对消息的回复,其他参与者是我与之交谈的人(这是Facebook原始JSON输出中的样子)
答案 0 :(得分:1)
您可以从以下命令行调用开始:
jq -n "[inputs | .messages] | add" *.json
这有许多假设。如果您的Windows Shell不支持通配符扩展,请参见Passing multiple wildcard filenames to a command in Windows和/或https://superuser.com/questions/460598/is-there-any-way-to-get-the-windows-cmd-shell-to-expand-wildcard-paths/460648#460648
其他假设是您使用的是jq 1.5或更高版本,当然,当前目录中的所有* .json文件都是相关的,并且* .json按所需顺序列出了它们。
如果最好通过显式列出JSON文件来确定其顺序,那么您可能需要创建一个批处理文件。如果它们的排序是由它们的内容决定的,则可以使用jq来为它们排序,但是具体操作方法将取决于有关排序标准的细节。