如何使用shell脚本获取JSON数据值以分离变量

时间:2016-09-08 07:22:55

标签: json shell parsing curl

我从.sh文件中的 JSON格式中的以下命令获得响应(使用shell脚本):

 **curl https://api.flipkart.net/sellers/skus/$col1/listings -H "Content-Type: application/json" -H "Authorization: Bearer $value"** 

以下是我的回复:

{"listingId":"LSMSW","skuId":"M7489","fsn":"ACCCQD","attributeValues":{"actual_stock_count":"1","mrp":"199","seller_listing_state":"current","procurement_sla":"2","zonal_shipping_charge":"0","stock_count":"10","local_shipping_charge":"0","listing_status":"ACTIVE","max_order_quantity_allowed":"3","fulfilled_by":"seller","fk_release_date":"2016-08-29 10:00:08","selling_price":"529","inventory_count":"10","national_shipping_charge":"0","sku_id":"M7489"},"listingValidations":null}

现在我想在单独的变量中提取所有值以便重复使用它 像:

LISTINGID = '列出ID值'

SKUID = 'skuId value'

还有更多。

如果有人知道答案,请使用解释进行评论。

2 个答案:

答案 0 :(得分:0)

以下是使用jq的解决方案。如果data.json包含示例数据,则使用以下bash脚本

#!/bin/bash
jq -M -r '
      .listingId
    , .skuId
    , .attributeValues.mrp
' data.json | \
while read -r listingId
      read -r skuId
      read -r mrp; do
   echo "$listingId $skuId $mrp"
done

产生

LSMSW M7489 199

脚本中的jq命令在单独的行上写出指定的属性,这些行由连续的read -r命令读入bash变量。应该清楚如何扩展或修改它以满足您的要求 - 主要约束是jq写的每一行应该有相应的read -r

答案 1 :(得分:-1)

我不知道任何bash json解析器。我会使用Python或Php并用其中一种语言解析Json字符串并从那里导出值。在Php中有putenv()方法。

祝你好运!

编辑: 点击这里 Parsing JSON with Unix tools