Необходимо получить значения объектов (JSON), которые были созданы динамически

Как получить значение верхнего объекта в PentahoDI? У меня есть другие элементы, такие как Category, Subcategory, section из следующего примера файла Json. Тем не менее, мне нужно захватить первый корневой объект, который x@chapter@e50de0196d77495d9b50fc05567b4a4b а также x@e50de0196d77495d9b50fc05567b4a4b

{
    "x@chapter@e50de0196d77495d9b50fc05567b4a4b": {
        "Category": "chapter", 
        "SubCategory": [
            "x@4eb9072cf36f4d6fa1e98717e6bb54f7", 
            "x@d85849fbde324690b6067f3b18c4258d", 
            "x@3edff1a1864f41fe8b212df2bc96bf13"
        ], 
        "Section": {
            "display_name": "Week 1 Section"
        }
    }, 
    "x@e50de0196d77495d9b50fc05567b4a4b": {
        "category": "course", 
        "Subcategory": [
            "x@e50de0196d77495d9b50fc05567b4a4b"
        ], 
        "Section": {
            "advanced_modules": [
                "google-document"
            ], 
        }
    }
}

На вкладке "Поля" шага "Ввод Json" я дал имена и пути в виде: Категория -> $.. Категория, Подкатегория -> $.. Подкатегория, Раздел -> $.. Раздел.

Тем не менее, я не могу получить корневой элемент, так как это важная информация для нас, чтобы работать над ним. бывший (x@chapter@e50de0196d77495d9b50fc05567b4a4b а также x@e50de0196d77495d9b50fc05567b4a4b)

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

var obj = JSON.parse (JBlock) //Jblock is the one which holds the entire string.
var keys = Object.name( obj);

1 ответ

  1. JSONPath не может получить ключи структуры JSON. Это одна из моих основных проблем с JSONPath, и я бы хотел, чтобы Pentaho включил другие механизмы синтаксического анализа JSON.

  2. Этот JavaScript будет использоваться в Modified Java Script Value работает для меня. Добавьте значение в редакторе полей следующим образом:

введите описание изображения здесь

И тогда такой скрипт:

var obj = JSON.parse(JBlock);
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
    var row = createRowCopy(getOutputRowMeta().size());
    var idx = getInputRowMeta().size();
    row[idx++] = keys[i];
    putRow(row);
}
trans_Status = SKIP_TRANSFORMATION;
Другие вопросы по тегам