将一个JSON模式映射到不同的JSON模式

时间:2017-11-25 15:11:19

标签: json json-ld

我有一堆JSON文件,数千种不同的模式。使用GenSON (the Python JSON schema generator),我设法为每个输入文件创建模式文件。现在,我想要做的是将所有这些不同的文件标准化为一个定义的模式。这是一个例子:

输入

{
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "region": "CA",
         "country": "United States"
     },
     "age": 62,
     "status": "Active"
}

输出

{
     "names": ["Bob Odenkirk"],
     "occupations": ["Software Engineer"],
     "locations": ["San Francisco, CA"]    
}

基本上,我正在寻找一种语言无关的方法(即,我不关心使用什么编程语言)来定义如何将输入JSON文件解析为输出JSON文件。

3 个答案:

答案 0 :(得分:1)

我不确定你的期望如下。很久以前我已经创建了平面对象和输出格式对象。它将返回填充数据的输出格式对象。

var input = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "region": "CA",
         "country": "United States"
     },
     "age": 62,
     "status": "Active"
};

var outputFormat = {
    "name": "name",
  "occupations": "title",
  "locations": "location.locality, location.region"
};

var flatInput = {};

function generateFlatInput(input, parent){
     for (var prop in input) {
        if(input.hasOwnProperty(prop) && typeof input[prop] === 'object')
            flatInput = generateFlatInput(input[prop], parent + prop + '.');
        else
         flatInput[parent + prop] =  input[prop];
    }

    return flatInput;
}

function generateOutput(input, outputFormat, delimiter){
     input = generateFlatInput(input, '');

     for (var prop in outputFormat) {
        var fields = outputFormat[prop].split(delimiter);
      var fieldValue = [];
      for(i = 0; i < fields.length; i++){
                    if(!input.hasOwnProperty(fields[i].trim())) continue;

          fieldValue.push(input[fields[i].trim()]);
      }
      outputFormat[prop] = fieldValue.join(delimiter);
   }

   return outputFormat;
}

console.log(generateOutput(input, outputFormat, ', '));

https://jsfiddle.net/u2yyuguk/1/

答案 1 :(得分:1)

Jolt Spec

[
  // First build the "city, state" string for location
  {
    "operation": "modify-default-beta",
    "spec": {
      "location": {
        "locConcat": "=concat(@(1,locality),', ',@(1,region))"
      }
    }
  },
  // Then map the fields as needed to positions in an output json
  {
    "operation": "shift",
    "spec": {
      "name": "name[0]",
      "title": "occupations[0]",
      "location": {
        "locConcat": "locations[0]"
      }
    }
  }
]

答案 2 :(得分:0)

我认为解析许多JSON文件的最好,最快,最简单的方法是使用python 我正在做一些类似于你的项目并遇到同样的问题。 我发现这个网站教会了如何使用python实际解析JSON文件。事实证明,python上有一个名为json的库(使用pip来下载json依赖项),它可以启用JSON文件处理。如果你已经有了一个python编辑器,那么使用 Jolt 这个方法会更容易,更快捷 请访问此网站了解更多信息:https://code.tutsplus.com/tutorials/how-to-work-with-json-data-using-python--cms-25758 你也可以使用JS,它再次比Jolt快。这是网站:https://docs.microsoft.com/en-us/scripting/javascript/reference/json-parse-function-javascript。这很简单,因为您可以使用JSON.parse()函数