需要使用Xidel从json数据中获取多个元素值。单个元素查询如:
xidel - -e 'jn:members(json($raw))("client_name")'
和
xidel - -e 'jn:members(json($raw))("amount")'
工作正常,但谷歌搜索很长时间,无法找到如何构建多个元素提取的表达式。以下尝试失败:
xidel - -e 'jn:members(json($raw))("client_name","amount")'
xidel - -e 'jn:members(json($raw))("client_name,amount")'
xidel - -e 'jn:members(json($raw))("client_name")("amount")'
xidel - -e 'jn:members(json($raw))[("client_name")("amount")]'
答案 0 :(得分:1)
一些Xidel特定的东西(> = 0.8版本):
您不再需要json($raw)
,$json
已足够
它有自己的JSON读取语法,更像是XPath而不是JSONiq:
xidel - -e 'jn:members($json) / (client_name, amount)'
或者像其他评论中提到的那样:
xidel - -e 'string-join($json / (id, your_name, total), ",")'
在普通的JSONiq中,可以使用库函数:
declare namespace libjn= "http://jsoniq.org/function-library";
string-join(libjn:values(libjn:project($json, ("id", "your_name", "total"))), ",")
答案 1 :(得分:0)
我们需要查看您拥有的JSON以及您想要的输出的一些解释,无论您是要输出JSON还是XML或字符串。
这是一个适用于Xidel在线演示的示例:
let $data := [
{ "client_name": "Foo", "order": 1, "amount": 20 },
{ "client_name": "Bar", "order": 2, "amount": 30 }]
for $order in jn:members($data)
return $order("client_name") || ": " || $order("amount")
并返回(我认为)一系列字符串
Foo: 20
Bar: 30
如果要返回JSON对象的三个属性,则应该能够使用
let $obj := json($raw) return $obj("id") || ', ' || $obj("your_name") || ', ' || $obj("total")
如果您不想使用管道,请尝试
let $obj := json($raw) return concat($obj("id"), ", ", $obj("your_name"), ", ", $obj("total"))
基于命令行的评论
xidel - -e 'let $obj := json($raw) return concat($obj("id"), ", ", $obj("your_name"), ", ", $obj("total"))'
应该这样做。
甚至
xidel - -e "let $obj := json($raw) return $obj('id') || ', ' || $obj('your_name') || ', ' || $obj('total')"