【问题标题】:Map one JSON schema to a different JSON schema将一个 JSON 模式映射到不同的 JSON 模式
【发布时间】:2017-11-25 15:11:18
【问题描述】:

我有一堆 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 文件。

【问题讨论】:

  • 命令行jq对处理JSON文档非常有用。
  • 检查我的答案,我已经给出了 python 和 js 这两种简单语言的链接,可以一起解析你的文件。

标签: json json-ld


【解决方案1】:

震动规格

[
  // 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】:

    网址https://github.com/bazaarvoice/jolt#jolt 说 Jolt 可能就是你要找的东西。

    摇晃

    用 Java 编写的 JSON 到 JSON 转换库,其中转换的“规范”本身就是一个 JSON 文档。

    有用

    从 ElasticSearch、MongoDb、Cassandra 等转换 JSON 数据,然后将其发送到世界

    从大型 JSON 文档中提取数据以供自己使用

    【讨论】:

      【解决方案3】:

      我不确定您的期望是否如下所示。很久以前,我创建了平面对象和输出格式对象。它将返回填充数据的输出格式对象。

      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/

      【讨论】:

        【解决方案4】:

        我认为将许多 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()函数

        【讨论】:

          猜你喜欢
          • 2011-12-14
          • 2012-03-17
          • 1970-01-01
          • 2018-07-09
          • 1970-01-01
          • 1970-01-01
          • 2021-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多