scala ujson.read() 返回 ujson.Obj

Posted

技术标签:

【中文标题】scala ujson.read() 返回 ujson.Obj【英文标题】:scala ujson.read() returns ujson.Obj 【发布时间】:2021-09-16 19:08:55 【问题描述】:

我正在尝试使用李浩毅的 ujson 读取一个 json 字符串。这是字符串:


  "dataflows": [
    
      "name": "test",
      "sources": [
        
          "name": "person_inputs",
          "path": "/data/input/events/person/*",
          "format": "JSON"
        
      ],
      "transformations": [
        
          "name": "validation",
          "type": "validate_fields",
          "params": 
            "input": "person_inputs",
            "validations": [
              
                "field": "office",
                "validations": [
                  "notEmpty"
                ]
              ,
              
                "field": "age",
                "validations": [
                  "notNull"
                ]
              
            ]
          
        ,
        
          "name": "ok_with_date",
          "type": "add_fields",
          "params": 
            "input": "validation_ok",
            "addFields": [
              
                "name": "dt",
                "function": "current_timestamp"


              
            ]
          
        
      ],
      "sinks": [
        
          "input": "ok_with_date",
          "name": "raw-ok",
          "paths": [
            "/data/output/events/person"
          ],
          "format": "JSON",
          "saveMode": "OVERWRITE"
        ,
        
          "input": "validation_ko",
          "name": "raw-ko",
          "paths": [
            "/data/output/discards/person"
          ],
          "format": "JSON",
          "saveMode": "OVERWRITE"
        
      ]
    
  ]

这就是我的阅读方式:

val j = os.read(os.pwd/RelPath("src/main/scala/metadata.json"))
val jsonData = ujson.read(j)

但是,返回类型是ujson.Obj,而不是Arr(ArrayBuffer(Obj),正如预期的那样,所以当我尝试获取jsonData(0)时,我得到的是json.Value$InvalidData: Expected ujson.Arr

我问这个问题是因为我尝试使用 ujson 对象来创建一个 upickle 对象,但我不能,我怀疑这是因为这个初始错误。

对为什么会发生这种情况有任何想法吗?任何帮助将不胜感激!提前致谢!!

【问题讨论】:

【参考方案1】:

JSON 的外部元素不是数组,它是具有单个元素 dataflows 的对象,其值为数组。试试jsonData("dataflows")(0)

【讨论】:

以上是关于scala ujson.read() 返回 ujson.Obj的主要内容,如果未能解决你的问题,请参考以下文章

awk基于匹配键在行中打印列数据

Javascript 不适用于 ujs 新生成的 DOM 元素

汉语-词语:幽静

使用 ujs 手动提交远程表单的 Rails 方式

Rails 5.1 中是不是还需要`require jquery_ujs`?

ajaxSetup 不适用于 Rails / jquery-ujs