强制 miller 将数据作为字符串读取并转换为 JSON

Mar*_*cos 0 json miller

在接下来的MWE中

echo x="1e2" | mlr --ojson cat
Run Code Online (Sandbox Code Playgroud)

我的目的是让 miller 生成一个包含该对象的单元素 JSON 数组

{"x": "1e2"}
Run Code Online (Sandbox Code Playgroud)

实际返回的对象(在数组内)是

{"x": 1e2}
Run Code Online (Sandbox Code Playgroud)

其中值被视为数字,我猜这是其解析的结果。我如何告诉 miller 生成 JSON 对象,其值是字符串而不是数字?(MWE 中“1e2”周围引号的基本原理正是为了强调这一意图。)

abo*_*uso 5

在 Miller 6 中,您可以使用-Sflag,这会强制 Miller 将数据视为字符串:

echo x="1e2" | mlr --ojson -S cat
Run Code Online (Sandbox Code Playgroud)

要得到

[
{
  "x": "1e2"
}
]
Run Code Online (Sandbox Code Playgroud)

或者你可以使用string函数来投射它

echo x="1e2" | mlr --ojson put '$x=string($x)'
Run Code Online (Sandbox Code Playgroud)