使用jq获取具有最新时间戳的json对象

时间:2019-06-25 16:05:44

标签: json jq

我有一个低于json的文件,但正在努力只显示最新的from zeep import Client, Settings settings = Settings(xml_huge_tree=True) client = Client('http://www.cbr.ru/secinfo/secinfo.asmx?WSDL', settings=settings) s = '2019-06-21T00:00:00' with client.settings(raw_response=True): result = (client.service.IDRepoRUBXML(s)) #print(dir(result)) text1 = (result.text) print(text1) # #data = literal_eval(text1.decode('utf8'),) def escape(t): """HTML-escape the text in `t`.""" return (t.replace("&amp;","&").replace("&lt;","<" ).replace( "&gt;",">").replace("&#39;","'").replace("&quot;",'"')) m = escape(text1) print(m) 的{​​{1}}。

我尝试过

description

还有一些,但我无法解决这个问题。

任何人都可以提供帮助吗?

JSON:

createdDate

2 个答案:

答案 0 :(得分:1)

只需按.createdDate排序,然后(假设即使只有多个.createdDate值最大,也只需要一个值),请选择最后一个:

.items
| sort_by(.createdDate)[-1].description

领带

如果需要平局中的所有描述:

.items
| sort_by(.createdDate)
| (.[-1].createdDate) as $max
| .[]
| select($max == .createdDate)
| .description

答案 1 :(得分:0)

编辑:使用峰回答是优越的

这是一个简单的脚本,可通过2个命令执行此操作。大概可以完成1次,但是我的nooblet技能还不够

您可以使用JQ中的数字数组通过管道传递到max,它将在输入数组中返回最大值。

然后,我们使用select抓取包含最大值的对象并输出描述。

我们还将使用arg,它允许我们引用局部环境变量,并且需要将其强制转换为数字,或者JQ认为它是字符串。

maxDate=$(cat tmp.json | jq '[.items[].createdDate] | max')

cat tmp.json | jq --arg maxDate "$maxDate" '.[][] | select(.createdDate == ($maxDate | tonumber)).description'

输出:

"this is description 2"

将来,请发布您想要的输出以及您的问题,以便响应者确信他们正在按照您的喜好解决问题