2012-10-09 32 views
8

Tengo un problema que me gustaría resolver para no tener que gastar un montón de trabajo manual para analizar como alternativa.JSON diff de datos JSON grandes, encontrando algunos JSON como un subconjunto de otro JSON

Tengo 2 objetos JSON (devueltos desde diferentes API del servicio web o respuestas HTTP). Hay datos que se cruzan entre los 2 objetos JSON, y comparten una estructura JSON similar, pero no idéntica. Un JSON (el más pequeño) es como un subconjunto del objeto JSON más grande.

Quiero encontrar todos los datos de interesecting entre los dos objetos. En realidad, estoy más interesado en los parámetros/propiedades compartidos dentro del objeto, no en los valores reales de los parámetros/propiedades de cada objeto. Porque quiero usar finalmente datos de una salida JSON para construir el otro JSON como entrada a una llamada API. Lamentablemente, no tengo la documentación que define el JSON para cada API. :(

Lo que hace esto más difícil es los objetos JSON son enormes. Uno se extiende por una página si se imprima a través de la libreta de Windows. Los otros tramos 37 páginas. Las API devolver la salida JSON comprimido como una sola línea. El texto normal comparar no hace mucho, tendría que volver a formatear manualmente o w/script para dividir el objeto w/nuevas líneas, etc. para una comparación de texto para que funcione bien. Probé con la herramienta Beyond Compare

Pude hacer manual search/grep, pero es complicado recorrer todos los parámetros dentro del JSON más pequeño. Podría escribir código para hacerlo, pero también tendría que dedicarle tiempo para hacerlo, y probar si el código también funciona. O tal vez haya alguno listo código ya hecho para eso ...

O puede buscar herramientas de tipo JSON diff. Buscado por algunos. Había encontrado con estas:

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

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

tanto no pudo hacer lo que quería. Presumiblemente, el JSON es demasiado complejo o demasiado grande para procesarlo.

¿Alguna idea sobre la mejor solución? ¿O podría ser la mejor solución por ahora el análisis manual w/grep para cada parámetro/propiedad?

En términos de una solución de código, cualquier idioma servirá. Solo necesito un analizador o herramienta de diferencias que haga lo que quiero.

Lo siento, no puedo compartir la estructura de datos JSON con usted tampoco, puede considerarse confidencial.

+0

¿Sabe usted que puede fácilmente agradable para la impresión de los datos JSON con saltos de línea y sangría? –

+0

FWIW: 37 páginas de visualización de texto JSON está lejos de ser "enorme"; No lo consideraría "grande", sino simplemente "no pequeño". –

+0

@ user1689607, ¿cómo imprimes bastante los datos JSON? No soy desarrollador web de ajax/jquery/js, no he desarrollado tecnología web con las últimas tecnologías, solo hace años que no hace ajax. Solo pruebo aplicaciones hoy en día. – David

Respuesta

1

Tengo un pequeño proyecto GPL que hacer el truco para sencilla JSON. No he agregado soporte para entidades anidadas, ya que es más una solución ObjectDB simple y no JSON en realidad (a pesar de que estaba claramente inspirado en ella.

La API larga y corta es bastante simple. Haz un nuevo grupo, poblarlo, y luego tirar de un subconjunto a través de cualquier parámetros lógicos que necesita

https://github.com/danielbchapman/groups

El API se utiliza básicamente como -.>

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

de hecho, hay apoyo a los sindicatos de base y se une a la cual Haría prácticamente lo que quieres.

En resumen, es posible que desee un conjunto como su tipo de datos. Considerando que sus comparaciones son probablemente complejas, necesita un conjunto de métodos más complejo.

Mi única advertencia es que es GPL. Si sus datos son confidenciales, es probable que no esté interesado en esa licencia.

+0

gracias, voy a echarle un vistazo a eso en algún momento, aunque no estoy seguro si es lo que necesito. – David

8

Beyond Compare funciona bien, si configura un formato de archivo JSON en él para usar Python para imprimir bastante el JSON. Configuración de muestra para Windows:

  1. Instalar Python 2.7.
  2. En Beyond Compare, vaya a Herramientas, en Formatos de archivo.
  3. Haga clic en Nuevo. Elija el formato de texto. Ingresa "JSON" como nombre.
  4. En la pestaña General:
    • Máscara: *.json
  5. En la pestaña Conversión:
    • Conversión: Programa externo (nombres de archivo Unicode)
    • Carga: c:\Python27\python.exe -m json.tool %s %t
      • Nota, ese segundo parámetro en la línea de comando debe ser %t, si ingresa dos %s s sufrirá pérdida de datos.
  6. Haga clic en Guardar.
+1

Tuve que ingresar "c: \ Python27 \ python.exe -m json.tool% s% t" para la ruta de carga (% t en vez de% s para la última variable). –

2

Jeremy Simmons ha creado un formato de paquete de archivos Posted on forum: "JsonFileFormat.bcpkg" mejor para BEYOND COMPARE que no requiere pitón o más para ser instalado.

Simplemente descargue el archivo y ábralo con BC y listo. Entonces, es mucho más simple.

formato JSON Archivo

necesitaba un formato de archivo para archivos JSON.

Quería imprimir bastante & ordenar mi JSON para facilitar la comparación.

He adjuntado mi bcpackage con mi formato de archivo JSON completo.

El formato se realiza a través JQ - http://stedolan.github.io/jq/

Apoyos a Stephen Dolan para la utilidad https://github.com/stedolan.

He enviado un mensaje a la gente de Scooter Software solicitándoles que lo incluyan en la página con formatos adicionales.

Si está interesado en verlo allí, estoy seguro de que recibirá una respuesta rápida al el hilo con un voto positivo que les ayudaría a ver el valor que se publica. archivos adjuntos Tipo de Archivo: bcpkg JsonFileFormat.bcpkg (449.8 KB, 58 visitas)

+0

Hmm ... Me pregunto con qué versión funciona esto o los pasos exactos de instalación. En una Mac con BC4. En Herramientas> Importar configuración, seleccione el archivo descargado, luego la siguiente pantalla es para elegir formatos de archivo y está en blanco, y no puede continuar, a menos que marque la casilla de verificación "eliminar todos los formatos de archivo existentes", pero no lo hago. Supongo que es una buena idea, me detuve allí. – David

+0

@David - Estoy usando esto en BC3 + Windows 8.1 x 64. El problema es que usa Windows .exe, así que no estoy seguro de cómo ponerlo en una Mac. Aunque existe una versión OSX de la aplicación también. Es posible que desee probar esto en un Windows para probarlo y/o ponerse en contacto con el autor del paquete sobre cómo hacerlo para Mac. Mi idea es que no debería ser tan complejo hacer lo mismo en Mac. Pero, como no tengo uno, no puedo resolverlo. –

+0

@David - Publiqué una solución basada en BC para SQLite también - aquí: http://sqa.stackexchange.com/a/14283/13028 - Esta muestra cómo configurar los tipos de archivo en BC. Ambas son extensiones de archivos aportadas por el usuario para BC. Uno está preempaquetado, el otro tiene un How To. Avíseme si eso funciona para usted. Si no, intentaré ayudarte con esto cuando tenga más tiempo PD: Nuevamente, no tengo una Mac así que no podría probarla con seguridad. –