无法使用JQ在JSON中获取项目

时间:2019-01-14 20:39:03

标签: json bash key jq

我有这个JSON:

{  
  "blocks" : {
    "xrb_1111111111111111111111111111111111111111111111111117353trpda": {    
        "142A538F36833D1CC78B94E11C766F75818F8B940771335C6C1B8AB880C5BB1D": "6000000000000000000000000000000"    
    },    
    "xrb_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3": {    
        "4C1FEEF0BEA7F50BE35489A1233FE002B212DEA554B55B1B470D78BD8F210C74": "106370018000000000000000000000000"    
    }  
}

我在使用jq中的bash进行读取时遇到了麻烦:

xrb_1111111111111111111111111111111111111111111111111117353trpda
xrb_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3

我尝试在jqplay上执行此操作,但是运气不佳。

我尝试使用jqplay来获取结果并管理查找,但是当它以这种方式嵌套时却没有。

3 个答案:

答案 0 :(得分:1)

jq脚本可能对您有用:

$ cat file
{
  "blocks": {
    "foo_b": {
      "aaa": "bbb"
    },
    "bar_b": {
      "ccc": "ddd"
    }
  }
}

$ jq -r '.blocks | to_entries[].key' file
foo_b
bar_b

答案 1 :(得分:1)

keys_unsorted给出了一组键。地点:

jq -r '.blocks | keys_unsorted[]' input.json
xrb_1111111111111111111111111111111111111111111111111117353trpda
xrb_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3

答案 2 :(得分:0)

首先,您的JSON无效。它缺少右括号。

$ cat input.json
{
  "blocks": {
    "xrb_1111111111111111111111111111111111111111111111111117353trpda": {
      "142A538F36833D1CC78B94E11C766F75818F8B940771335C6C1B8AB880C5BB1D": "6000000000000000000000000000000"
    },
    "xrb_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3": {
      "4C1FEEF0BEA7F50BE35489A1233FE002B212DEA554B55B1B470D78BD8F210C74": "106370018000000000000000000000000"
    }
  }
}

如果您愿意使用jq以外的其他工具,那么我建议您使用瑞士刀工具Xidel

点符号:

$ xidel -s input.json -e '($json).blocks()'

XPath表示法:

$ xidel -s input.json -e '$json/(blocks)()'

两者都带有输出:

xrb_1111111111111111111111111111111111111111111111111117353trpda
xrb_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3