Curl以获取多个JSON对象

时间:2016-11-23 20:25:32

标签: python json curl sed

我必须调用一个服务来从中获取一些数据。我使用curl

卷曲命令

< /example/data/sample.dat xargs -P10 curl -H "Authorization: Bearer $token" -X GET -L  > /example/json/data.json

我有我在这里使用的应用程序令牌。

文件sample.dat看起来像这样

"http://xxx/marketing/insights/v1/info?id=0553153617,B003W0CI6Y,B000R08E7Y,B001O2SAAU,B00B1MP3MG,B00QRHJBPU,B00007B4DC,0852597088,B0000003H4,1937715213&fields=product.title,product.url,&fieldgroups=default"
"http://xxx/marketing/insights/v1/info?id=0553153617,B003W0CI6Y,B000R08E7Y,B001O2SAAU,B00B1MP3MG,B00QRHJBPU,B00007B4DC,0852597088,B0000003H4,1937715213&fields=product.title,product.url,&fieldgroups=default"
"http://xxx/marketing/insights/v1/info?id=0746029853,1613210035,B004SI9OKW,1572841451,B00FC1BQUA,3170218085,B009QJYBVK,B0181P5E42,B01J8JRZ92,0961268611&fields=product.title,product.url,&fieldgroups=default"
"http://xxx/marketing/insights/v1/info?id=1402206836,B006FQQMZA,1624386903,B001ANZW0O,0872200450,B0035LCSCO,B00JRQ7T5W,1401951341,B00PKSCDRU,B00PKR4UW2&fields=product.title,product.url,&fieldgroups=default"

因此,当您看到我使用10个ID进行并行调用时。

我收到的输出是文件/example/json/data.json中的3个JSON对象。

示例:

{.....}{...}{...}

现在,当我必须使用python解析它时,它无法说出无效的json。这是正确的,因为该文件不代表标准的JSON数组

所以使用sed我试图将其改为

[{.....},{...},{...}]

现在看起来像JSON,可以解析。这个逻辑适用于小数据但是数据量较大,我认为我的sed无法将,置于JSON内的正确位置,因此导致文件不正确。因此,python中的JSON解析器失败。

现在我在想是否可以在每一行上拥有单独的JSON对象 像

{...}
{...}
{...}

这样我就可以逐行读取文件。

有人可以帮助我如何更改卷曲以输出每行上的单个jsons,如

{...}
{...}
{...} 

1 个答案:

答案 0 :(得分:0)

将每个结果写入不同的JSON文件。

i=0
while read url; do
    curl -H "Authorization: Bearer $token" -X GET -L > data.$i.json
    i=$((i+1))
done < sample.dat

或者您可以在循环中写入单个文件,在元素之间插入逗号分隔符。

i=0
while read url; do
    if [[ i -eq 0 ]]
        then echo '['
        else echo ','
    fi
    curl -H "Authorization: Bearer $token" -X GET -L 
    i=$((i+1))
done < sample.dat > data.json
echo ']' >> data.json