云数据迁移 CDM-文件格式介绍:JSON格式

时间:2025-02-12 15:01:36

JSON格式

这里主要介绍JSON文件格式的以下内容:
  1. CDM支持解析的JSON类型:JSON对象、JSON数组。
    • JSON对象:JSON文件包含单个对象,或者以行分隔/串连的多个对象。
      1. 单一对象JSON
        {     "took" : 190,     "timed_out" : false,     "total" : 1000001,     "max_score" : 1.0 }
      2. 行分隔的JSON对象
        {"took" : 188, "timed_out" : false, "total" : 1000003, "max_score" : 1.0 }{"took" : 189, "timed_out" : false, "total" : 1000004, "max_score" : 1.0 }
      3. 串连的JSON对象
        {    "took": 190,    "timed_out": false,    "total": 1000001,    "max_score": 1.0 } {    "took": 191,    "timed_out": false,    "total": 1000002,    "max_score": 1.0 }
    • JSON数组:JSON文件是包含多个JSON对象的数组。
      [{      "took" : 190,      "timed_out" : false,      "total" : 1000001,      "max_score" : 1.0  },  {      "took" : 191,      "timed_out" : false,      "total" : 1000001,      "max_score" : 1.0  }]
  2. 记录节点

    记录数据的根节点。该节点对应的数据为JSON数组,CDM会以同一模式从该数组中提取数据。多层嵌套的JSON节点以字符“.”分隔。

  3. 从JSON文件复制数据
    1. 示例一
      从行分隔/串连的多个对象中提取数据。JSON文件包含了多个JSON对象,例如:
       {    "took": 190,    "timed_out": false,    "total": 1000001,    "max_score": 1.0 } {    "took": 191,    "timed_out": false,    "total": 1000002,    "max_score": 1.0 } {    "took": 192,    "timed_out": false,    "total": 1000003,    "max_score": 1.0 }
      如果您想要从该JSON对象中提取数据,使用以下格式写入到数据库,只需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON对象”,然后在作业第二步进行字段匹配即可。
      表2 示例

      took

      timedOut

      total

      maxScore

      190

      false

      1000001

      1.0

      191

      false

      1000002

      1.0

      192

      false

      1000003

      1.0

    2. 示例二
      从记录节点中提取数据。JSON文件包含了单个的JSON对象,但是其中有效的数据在一个数据节点下,例如:
      {    "took": 190,    "timed_out": false,    "hits": {        "total": 1000001,        "max_score": 1.0,        "hits":          [{            "_id": "650612",            "_source": {                "name": "tom",                "books": ["book1","book2","book3"]            }         },         {             "_id": "650616",             "_source": {                 "name": "tom",                 "books": ["book1","book2","book3"]             }         },       {             "_id": "650618",             "_source": {                 "name": "tom",                 "books": ["book1","book2","book3"]             }         }]     } }
      如果想以如下格式写入到数据库,则需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON对象”,并且指定记录节点为“hits.hits”,然后在作业第二步进行字段匹配。
      表3 示例

      ID

      SourceName

      SourceBooks

      650612

      tom

      ["book1","book2","book3"]

      650616

      tom

      ["book1","book2","book3"]

      650618

      tom

      ["book1","book2","book3"]

    3. 示例三
      从JSON数组中提取数据。JSON文件是包含了多个JSON对象的JSON数组,例如:
      [{      "took" : 190,      "timed_out" : false,      "total" : 1000001,      "max_score" : 1.0  },  {      "took" : 191,      "timed_out" : false,      "total" : 1000002,      "max_score" : 1.0  }]

      如果想以如下格式写入到数据库,需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON数组”,然后在作业第二步进行字段匹配。

      表4 示例

      took

      timedOut

      total

      maxScore

      190

      false

      1000001

      1.0

      191

      false

      1000002

      1.0

    4. 示例四
      在解析JSON文件的时候搭配转换器。在示例二前提下,想要把hits.max_score字段附加到所有记录中,即以如下格式写入到数据库中:
      表5 示例

      ID

      SourceName

      SourceBooks

      MaxScore

      650612

      tom

      ["book1","book2","book3"]

      1.0

      650616

      tom

      ["book1","book2","book3"]

      1.0

      650618

      tom

      ["book1","book2","book3"]

      1.0

      则需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON对象”,并且指定记录节点为“hits.hits”,然后在作业第二步添加转换器,操作步骤如下:
      1. 单击添加字段,新增一个字段。
        图2 添加字段
      2. 在添加的新字段后面,单击添加字段转换器。
        图3 添加字段转换器
      3. 创建“表达式转换”的转换器,表达式输入“1.0”,然后保存。
        图4 配置字段转换器
support.huaweicloud.com/usermanual-cdm/cdm_01_0130.html