2017-10-13 85 views
-1

我有以下的JSON文件:bash脚本过滤JSON文本

{ 
    "error": 0, 
    "data": { 
    "0": { 
     "orderid": "40007600", 
     "price": "9.99", 
     "listingname": "iPhone 8", 
     "smallphoto": "https://images-eu.ssl-images-amazon.com/images/I/51b5iaLTjgL._SL160_.jpg", 
     "photo": "https://images-eu.ssl-images-amazon.com/images/I/51b5iaLTjgL.jpg" 
    }, 
    "1": { 
     "orderid": "40007598", 
     "price": "9.99", 
     "listingname": "iPhone 8 Plus", 
     "smallphoto": "https://images-eu.ssl-images-amazon.com/images/I/51CVLqsSNkL._SL160_.jpg", 
     "photo": "https://images-eu.ssl-images-amazon.com/images/I/51CVLqsSNkL.jpg" 
    }, 
    "4": { 
     "orderid": "40007595", 
     "price": "9.39", 
     "listingname": "Nadelflaschen", 
     "smallphoto": "https://images-eu.ssl-images-amazon.com/images/I/41OHDP2rAeL._SL160_.jpg", 
     "photo": "https://images-eu.ssl-images-amazon.com/images/I/41OHDP2rAeL.jpg" 
    }, 
    } 
} 

我如何可以筛选出bash脚本的一切,所以我得到“smallphoto”的所有图像的URL到一个文本文件?

f.e.来自“Nadelflaschen”的https://images-eu.ssl-images-amazon.com/images/I/41OHDP2rAeL.SL160.jpg

我尝试了awk和jq命令。但我只是为了理解jq语法而倾倒。

awk是可能的,但我只得到与反斜杠的未过滤链接,这是行不通的。

+0

欢迎StackOverflow上。不幸的是,这既不是教程网站,也不是网络搜索替代品我们可以帮助解决[某些问题](https://stackoverflow.com/help/on-topic),但它是**你的**工作[付出一些努力](http://meta.stackoverflow.com/questions/261592)首先,包括。小学[(重新)搜索](https://google.com/)。大多数新手的问题不是独一无二的,并且已经被多次回答。 –

回答

3
jq '.data[] | .smallphoto' input.json 

收率:

"https://images-eu.ssl-images-amazon.com/images/I/51b5iaLTjgL._SL160_.jpg" 
"https://images-eu.ssl-images-amazon.com/images/I/51CVLqsSNkL._SL160_.jpg" 
"https://images-eu.ssl-images-amazon.com/images/I/41OHDP2rAeL._SL160_.jpg" 

这里的关键点是,.[].data[]是的.data|.[]的缩写形式)可与JSON对象,不只是阵列中使用。

1

这里是另一个过滤器,会发现.smallphoto无论多么深的嵌套:

.. | .smallphoto?//empty 

Try it online!

样品试验(在data.json假设修正的样本数据)

$ jq -M '.. | .smallphoto?//empty' data.json 
"https://images-eu.ssl-images-amazon.com/images/I/51b5iaLTjgL._SL160_.jpg" 
"https://images-eu.ssl-images-amazon.com/images/I/51CVLqsSNkL._SL160_.jpg" 
"https://images-eu.ssl-images-amazon.com/images/I/41OHDP2rAeL._SL160_.jpg"