Transformator JSON do JSON

Mam scenariusz.

Wymagane wejście i wyjście to JSON.

// Input
{
  "OldObject": {
    "Time": 1351160457922,
    "Name": "OName",
    "quantity": 100,
    "price": 10
  }
}


// Output
{
  "NewObject": {
    "Time": 1351160457922,
    "Title": "OName",
    "quantity": 100
  }
}

Potrzebuję kodu transformacji lub najlepiej języka typu xslt, aby przekształcić json z jednego formatu na drugi. Transformator ten również musi być szybki, ponieważ transformacja będzie wykonywana w locie.

Edit
Nie mam odebranej definicji obiektu wejściowego i może się ona zmienić w czasie wykonywania. ale w razie potrzeby mogę użyć klasy dla obiektu wyjściowego. Próbowałem to zrobić jako json - > xml - >xslt - > xml - > json, ale na tym końcu odbierane jest około 1000 obiektów na sekundę i ten proces może być obciążony kosztami.
Nie mogę również korzystać z JavaScript, ponieważ myApp jest prosta Aplikacja java oparta na systemie windows i korzystanie z JavaScript może powodować koszty ogólne.

Author: Chaturvedi Dewashish, 2012-10-25

6 answers

Możesz użyć ZORBA i JsonIQ http://www.jsoniq.org/ Jednak jest to natywna Biblioteka, jest dostarczana z opakowaniem, dzięki czemu można go używać w Javie.

 4
Author: mvallebr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-06 20:43:34

Spróbuj wstrząs . Jest to biblioteka transformacji JSON do JSON napisana w Javie. Został stworzony w ramach projektu, który przekształcał wiele JSON z "backendu" ElasticSearch do interfejsu API.

Dla transformacji JSON, którą wymieniłeś w swoim problemie, parametr "shift" byłby następujący:

// Jolt "shift" spec
{
    "OldObject": {
        "Time": "NewObject.Time",   
        "Name": "NewObject.Title", // if the input has "OldObject.Name", copy it's value
                                   // to "NewObject.Title
        "quantity": "NewObject.quantity"
    }
}
 16
Author: Milo S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 20:34:15

Możesz wykonać tę transformację za pomocą JSON patch.

Przykład z jsonpatch-js :

var transformations = [
  { move: '/OldObject', to: '/NewObject' },
  { remove: '/NewObject/price' },
  { move: '/NewObject/Name', to: '/NewObject/Title' }
];

var oldObject = { "OldObject": { "Time": 1351160457922, "Name": "OName", "quantity": 100, "price": 10 } };

jsonpatch.apply(oldObject, transformations);
Nie testowałem tego, ale powinno tak działać.
 10
Author: KARASZI István,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-20 06:57:56
 1
Author: Udhaya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 15:50:04

Możesz wypróbować bibliotekę Java Silencio , która pozwala przekonwertować każdy węzeł pliku JSON na nowe wartości. Możesz zdecydować, które i jak węzły mają zostać przekształcone.

 0
Author: Damian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-18 18:26:40

Inną opcją jest użycie Logz.io Tartak biblioteka. Definiujesz potoki i wykonujesz je. Dla przykładu:

{
  steps: [
    {
      rename {
         config {
            from: "OldObject"
            to: "NewObject"
         }
      }
    }

    {
      removeField {
        config {
          path: "NewObject.price"
        }
      }
    }

    {
      rename {
        config {
          from: "NewObject.Name"
          to: "NewObject.Title"
        }
      }
    }
  ]
}
 0
Author: Asaf Mesika,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 13:58:39