2015-06-05 131 views
1

訪問JSON值我使用curl命令:無法從捲曲

curl -X POST -H "Content-Type: application/json" http://localhost:8081/creditcard -d '{"credit-card":"1234-5678-9101-1121"}' 

在我的js文件,我有這樣的代碼塊,以獲得信用卡的價值:

request.on('data', function(data) { 
    var cc = 'credit-card'; 

    var a = JSON.parse(data.toString()); 

    console.log(a[cc]); 
} 

對於這個我得到:

undefined:1 
'{credit-card:1234-5678-9101-1121}' 
^ 
SyntaxError: Unexpected token ' 
    at Object.parse (native) 
    at IncomingMessage.<anonymous> (<path>\ccserver.js:32:34) 
    at IncomingMessage.emit (events.js:107:17) 
    at IncomingMessage.Readable.read (_stream_readable.js:373:10) 
    at flow (_stream_readable.js:750:26) 
    at resume_ (_stream_readable.js:730:3) 
    at _stream_readable.js:717:7 
    at process._tickCallback (node.js:355:11) 

所以我試圖用JSON.stringify如下:

request.on('data', function(data) { 
    var cc = 'credit-card'; 

    var a = JSON.parse(JSON.stringify(data.toString())); 

    console.log(a[cc]); 
} 

但是,這是我所得到的:

undefined 
undefined 

然而,當我嘗試解析一個硬編碼的JSON字符串,它會確定:

var jsonString = '{"credit-card":"1234-5678-9101-1121"}'; 
var a = JSON.parse(jsonString); 
console.log(a[cc]); 

結果:

1234-5678-9101-1121 

從這個json獲取數據的正確方法是什麼?

請告知 感謝

+0

你爲什麼要調用'data.toString()'?這不是'串'嗎? – smnbbrv

+0

@simon [''data'''chunk'](https://nodejs.org/api/stream.html#stream_event_data)默認爲'Buffer',除非['setEncoding()'](https:/ /nodejs.org/api/stream.html#stream_readable_setencoding_encoding)。 –

+1

在JSON到達服務器之前,似乎正在使用雙引號。您使用哪個控制檯/終端/外殼來調用'curl'? –

回答

0

嘗試從絕對路徑

curl -X POST 
    -H 'Content-Type:application/json' 
    -H 'Accept: application/json' 
    --data-binary @/full/path/to/test.json 
    http://server:port/xyz/abc/blah -v -s 

好讀書,你已經擁有的String,所有你需要將其轉換爲JavaScript變量,並得到使用.notation。建議使用firebug來查看變量中的內容。

obj = JSON.parse(json); 
obj.cc or obj.cc[0] 

應該給你你想要的。

+0

對不起,我沒有完全得到你的解決方案.. –

+0

這些步驟添加內容類型的請求和響應。您的回覆中可能包含內容類型。你有沒有嘗試IE瀏覽器中的螢火蟲或F12選項來查看值? –