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的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 不适用于 ujs 新生成的 DOM 元素