JSON diff больших данных JSON, нахождение некоторого JSON в качестве подмножества другого JSON

У меня есть проблема, которую я хотел бы решить, чтобы не тратить много ручного труда на анализ в качестве альтернативы.

У меня есть 2 объекта JSON (возвращаемые из различных API веб-сервисов или HTTP-ответов). Между объектами JSON имеются пересекающиеся данные, и они имеют сходную структуру JSON, но не идентичны. Один JSON (меньший) похож на подмножество большего объекта JSON.

Я хочу найти все взаимоисключающие данные между двумя объектами. На самом деле меня больше интересуют общие параметры/свойства внутри объекта, а не фактические значения параметров/свойств каждого объекта. Потому что я хочу, в конечном счете, использовать данные из одного вывода JSON для создания другого JSON в качестве входа в вызов API. К сожалению, у меня нет документации, которая определяет JSON для каждого API.: (

Что делает это более жестким, объекты JSON огромны. Один охватывает страницу, если вы распечатываете ее через Блокнот Windows. Остальное - 37 страниц. API возвращают выход JSON, сжатый как одна строка. Обычное сравнение текста не так уж много, мне придется переформатировать вручную или w/ script, чтобы разбить объект w/newlines и т.д., Чтобы текст сравнил работу. Пробовал с помощью инструмента сравнения Beyond.

Я мог бы выполнять ручной поиск /grep, но это боль, чтобы перебирать все параметры внутри меньшего JSON. Мог написать код, чтобы сделать это, но я также должен потратить время на это, а также проверить, работает ли код. Или, может быть, там уже готовый код уже для этого...

Или можно искать инструменты JSON diff. Искал для некоторых. Пришли через них:

https://github.com/samsonjs/json-diff или https://tlrobinson.net/projects/javascript-fun/jsondiff

https://github.com/andreyvit/json-diff

оба не сделали того, что я хотел. Предположительно, JSON слишком сложна или слишком велика для обработки.

Любые мысли о наилучшем решении? Или может быть лучшим решением на данный момент является ручной анализ w/grep для каждого параметра/свойства?

С точки зрения решения кода любой язык будет работать. Мне просто нужен синтаксический анализатор или инструмент сравнения, который будет делать то, что я хочу.

Извините, вы не можете совместно использовать структуру данных JSON, это может считаться конфиденциальным.

+9
источник поделиться
4 ответа

Beyond Compare хорошо работает, если вы настроили в нем формат файла JSON, чтобы использовать Python, чтобы печатать JSON. Пример установки для Windows:

  • Установить Python 2.7.
  • In Beyond Compare, перейдите в раздел "Инструменты" в разделе "Форматы файлов".
  • Нажмите "Создать". Выберите "Формат текста". Введите "JSON" в качестве имени.
  • На вкладке "Общие":
    • Маска: *.json
  • На вкладке "Конверсия":
    • Конверсия: внешняя программа (имена файлов Unicode)
    • Загрузка: c:\Python27\python.exe -m json.tool %s %t
      • Обратите внимание, что второй параметр в командной строке должен быть %t, если вы введете два %s, вы потеряете потерю данных.
  • Нажмите "Сохранить".
+10
источник

Джереми Симмонс создал лучший пакет формата файла Опубликовано на форуме: "JsonFileFormat.bcpkg" для BEYOND COMPARE, который не требует установки python или так.

Просто скачайте файл и откройте его с помощью BC, и вы хорошо пойдете. Таким образом, это намного проще.

Формат файла JSON

Мне нужен формат файла для файлов JSON.

Я хотел довольно-таки распечатать и отсортировать мой JSON, чтобы упростить сравнение.

Я подключил свой bcpackage с моим законченным файловым форматом JSON.

Форматирование выполняется через jq - http://stedolan.github.io/jq/

Стивен Долан для утилиты https://github.com/stedolan.

Я отправил сообщение на программу Scooter Software, в котором добавьте его на страницу с дополнительными форматами.

Если вам интересно увидеть его там, я уверен, что быстрый ответ поток с голосованием поможет им увидеть значение, отправляющее его. Присоединенные файлы Вложенные файлы Тип файла: bcpkg JsonFileFormat.bcpkg(449,8 КБ, 58 просмотров)

+3
источник

У меня есть небольшой проект GPL, который бы сделал трюк для простого JSON. Я не добавил поддержку вложенных объектов, поскольку это скорее простое решение ObjectDB, а не JSON (несмотря на то, что он был явно вдохновлен им.

Длинные и короткие API довольно просты. Создайте новую группу, заполните ее, а затем потяните подмножество с помощью любых логических параметров, которые вам нужны.

https://github.com/danielbchapman/groups

API используется в основном как →

SubGroup items = group
                  .notEqual("field", "value")
                  .lessThan("field2", 50); //...etc...

Фактически поддерживаются базовые объединения и объединения, которые будут делать практически то, что вы хотите.

Длинный и короткий вы, вероятно, хотите, чтобы в качестве типа данных был Set. Учитывая, что ваши сравнения, вероятно, сложны, вам нужен более сложный набор методов.

Моя единственная осторожность в том, что это GPL. Если ваши данные являются конфиденциальными, вероятность того, что вы не заинтересованы в этой лицензии.

+1
источник

Подобный вопрос или идея, как сравнить большие JSON также здесь Как сравнить большие JSON? (вероятно, нет простого способа соединить эти вопросы?)

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос