2016-11-23 25 views
0

我必須調用一個服務才能從中獲取一些數據。我用捲曲它用於獲取多個JSON對象的捲曲

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,035,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個IDS到服務並行調用。

我收到的輸出是文件/example/json/data.json中的3個JSON對象。

例子:

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

現在,當我有使用Python解析它,它不能說無效JSON。那是正確的,因爲文件並不代表一個標準的JSON數組

所以使用的sed我試圖將其更改爲

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

現在這個樣子JSON,可以被解析。這個邏輯適用於小數據,但數據量較大,我認爲我的sed無法將,置於JSON的正確位置,因此導致文件不正確。因此,python中的JSON解析器失敗。

現在,我就在想,如果我能有每行 個人JSON對象,如

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

這樣我可以逐行讀取文件中的行。

有人能與我怎麼能每個結果改變捲曲輸出單個jsons每行像

{...} 
{...} 
{...} 
+0

這適用於少數但不是全部情況。在中間的某個地方,這是行爲不端 – donny

+0

爲什麼不寫他們來分開JSON文件,而不是全部到同一個文件? – Barmar

+0

你能建議我如何調整我的捲曲聲明嗎? – donny

回答

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