Объедините все файлы JSON в каталоге в один файл - Windows - PullRequest
0 голосов
/ 28 сентября 2018

Я довольно новичок в JSON, и в настоящее время у меня есть список ~ 130 файлов JSON, которые я получил, загрузив свои данные сообщений в Facebook.В настоящее время я пытаюсь использовать JQ, чтобы объединить их все в один файл json, сохраняя при этом существующий порядок сообщений, однако я сталкиваюсь с ошибками при попытке ввода команд в Windows.Я пытался следовать их советам для Windows в FAQ и все еще сталкиваюсь с проблемами.

Все файлы имеют одинаковую структуру

{
  "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 filename Но ятакже получаю ошибки

Я получаю следующие ошибки:

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"
    }
  ]

Где участник два представляет мои ответы на сообщения, а другие участники - это люди, с которыми я общаюсь (как в оригинальном JSONвывод из фейсбука)

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете начать со следующего вызова командной строки:

jq -n "[inputs | .messages] | add" *.json 

Это имеет ряд предположений.Если ваша оболочка Windows не поддерживает расширение с подстановочными знаками, см. Передача нескольких имен файлов с подстановочными знаками команде в 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 для их заказа, но детали того, как это сделать, будут зависеть от деталей о критериях сортировки.

...