2016-11-23 7 views
0

Мне нужно вызвать службу для извлечения некоторых данных из нее. Я использую локон для этогоCurl для извлечения нескольких объектов 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 ид к службе.

Выход, который я получаю, составляет 3 объекта JSON в файле /example/json/data.json.

Пример:

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

Теперь, когда я должен разобрать его с помощью питона, он не говоря недействительный JSON. То исправить, потому что файл не представляет собой стандартный формат JSON массива

Таким образом, используя СЭД, я попытался изменить его

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

Теперь это выглядит как JSON и может быть разобрано. Эта логика отлично работала для небольших данных, но с большими данными, я думаю, что мой sed не смог поместить , в нужное место внутри JSON, и, следовательно, это привело к неправильному файлу. В результате синтаксический анализатор JSON в python не работает.

Теперь я думаю, если я могу иметь отдельные JSON объекты на каждой линии как

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

Таким образом, я могу прочитать файл построчно.

Может кто-то помочь с тем, как я могу изменить завиток для вывода отдельных jsons на каждой линии, как

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

Это работало для нескольких, но не для всех случаев. Где-то посередине это плохое поведение – donny

+0

Почему бы вам не написать их для разделения файлов JSON вместо того, чтобы идти в один и тот же файл? – Barmar

+0

Можете ли вы предложить, как я могу настроить приложение curl? – 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 
Смежные вопросы