2016-11-17 20 views
0

我想寫一個小腳本來上傳代碼片段到我們使用的服務提供者,要求您將該代碼傳遞給JSON對象。傳遞代碼文件作爲對象JSON的一部分使用捲曲

file_content=$(<my_file.js) 
curl -X POST -H "Content-Type: application/json" 
    -d '{"name":$file_name","script":"$file_content"}' https://someservice.com/api/endpoint 

其中file_content是my_file中的javascript代碼。問題就是那樣打印,有效負載是無效的。我試圖找到一種方法來讀取該文件的方式,它是有效的json。我知道這很具體,但是想知道這樣的命令是否存在。

編輯:另一種選擇是將整個JSON對象放在一個文件中,但如果可能的話,我想避免這種情況。

+0

的可能的複製[使用curl命令行發送/後xml文件] (http://stackoverflow.com/questions/3007253/send-post-xml-file-using-curl-command-line) – Tomalak

+0

@Tomalak它是相似的,但它會要求我將整個JSON對象移動到文件本身。如果我找不到解決方案,我會去找這個。 – acadavid

回答

1

除了最簡單的情況,你不能像這樣構建JSON,即通過字符串插值。將文件內容放入JSON字符串並不是一個簡單的例子。

JSON需要由實際的JSON序列化程序構建。 Python有這樣一個序列化器,讓Python做這件事很容易。

# from http://stackoverflow.com/a/13466143 
json_escape() { 
    printf '%s' $1 | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))' 
} 

所以你可以做適當的值編碼:

file_content=$(<my_file.js) 
json_file_name=$(json_escape "fancy filename") 
json_file_content=$(json_escape "$file_content") 
json='{"name":'$json_file_name',"script":'$json_file_content'}' 

curl -X POST -H "Content-Type: application/json" -d "$json" https://someservice.com/api/endpoint 
+0

是的,我認爲我試圖做的是使用更原始的工具有點不合理。非常感謝你的幫助! – acadavid

+0

在bash中沒有適當的JSON處理,到目前爲止我發現的所有東西都是明顯錯誤的,或者使用外部工具。有用於JSON操作的工具(如https://stedolan.github.io/jq/),但它們很可能不是Linux的標準版本,因此可移植性是一個問題。然而,Python很可能是可用的,它很成熟並且速度很快。如果您的腳本都是將數據發送到API,那麼我建議完全將其轉換爲Python腳本。您可以使用Python創建HTTP請求並可能處理響應。 – Tomalak

+1

同意。最後,我去了一個Ruby腳本,這是簡單方便的方法,我只是在玩弄這個想法,但最終只是用適當的工具來做到這一點。 – acadavid

0

使用jq的JSON序列化能力:

cat my_file.js | jq '@json'