我必须调用一个服务来从中获取一些数据。我使用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,如
{...}
{...}
{...}
答案 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