2016-07-05 25 views
-1

您好我有一個字符串,它看起來像這樣,字符串轉換數據對象在Javascript

ll: 11, kw: sw, wit: jajar 

這個數據是從谷歌電子表格來,所以這是他們所代表行的方式。

我希望將其轉換爲JavaScript以便於解析。我嘗試了以下,但顯然沒有工作。

var mz = data.feed.entry[0].content.$t; //which is ll: 11, kw: sw, wit: jajar 
var text = "{"+ miz +"}" 
var json = JSON.parse(text) 

然而,這並不將其轉換成JSON,給我下面的錯誤,

SyntaxError: JSON.parse: unterminated string at line 1 column 35 of the JSON data

我如何轉換這樣的字符串,以JSON,方便解析?我也嘗試使用''分割內聯,但是如果列中包含','則會給出錯誤數據,因此分解也不是一個好的解決方案。

感謝

+0

爲了使它成爲一個有效的json,你必須用引號替換空格(因爲只有單個空格)。逗號也應該被替換:, - >「, –

+0

這個字符串不是JSON格式,至少需要大括號,使用JSONlint.com來檢查它 – Sablefoste

+1

它可以像'wit:Hello foo,...' ? – Rajesh

回答

-1

你可以這樣做:

var xx="ll: 11, kw: sw, wit: jajar"; 
 

 
xx=xx.split(","); 
 
var t={}; 
 
xx.forEach(function(x){ 
 
x=x.split(":"); 
 
t[x[0].trim()]=x[1].trim(); 
 
}); 
 

 
console.log(t);

+0

x [0]和x [1]是從字符串分割的值。一個將成爲關鍵和一個數據 –

+0

哦是的..更新了答案。 appritiate的建議 –

+0

就像我說的拆分可以給出一個錯誤,如果你按照逗號,如果列包含逗號然後提供虛假數據拆分它。我在這個問題中提到過。 – rksh

0

你必須要對它進行適當的JSON。

var str = '11: 11, kw: sw, wit: jajar'; 
 
str = '{"' +str.replace(/ /gm,"").replace(/:/gm, '":"').replace(/,/gm,'","') + '"}'; 
 
console.log(str); 
 

 
var obj = JSON.parse(str); 
 

 
console.log(JSON.stringify(obj));

0

你可以強制格式轉換成JSON(因爲它是相似的),或者你可以只是自己分析它:

var obj = "ll: 11, kw: sw, wit: jajar".split(", ") 
 
    .reduce(function(prev, curr) { 
 
     var keyValue = curr.split(": "); 
 
     var key = keyValue[0]; 
 
     var value = keyValue[1]; 
 
     var num = Number.parseFloat(value); 
 
     if (value === "true" || value === "false") { 
 
      return (prev[key] = value === "true", prev); 
 
     } else if (!Number.isNaN(num)) { 
 
      return (prev[key] = num, prev); 
 
     } 
 
     return (prev[key] = value, prev); 
 
    }, {}); 
 
console.log(obj);

這應該保留布爾&數字原語以及假設其他所有內容都是字符串。

+0

再次你被逗號分割它,如果拆分由逗號字符串作爲如果該列包含在其數據逗號,它會給虛假數據。 – rksh

+1

@rksh確實可以說是一個冒號。但是,如果沒有來自OP – CodingIntrigue

0

json字符串中的所有字符串參數應引用。
使用下面的方法與String.replaceIsNaN(保存整數值)功能:

var mz = "ll: 11, kw: sw, wit: jajar", 
    text = "{" + mz.replace(/(\w+?):\s?([^,]+)(,?)/g, function (m, p1, p2, p3) { 
      var val = Number(p2); // check for integer value 
      return '"' + p1 + '":' + (isNaN(val)? '"'+p2+'"' : val) + p3; 
     }) + "}"; 

console.log(JSON.parse(text)); // `Object {ll: 11, kw: "sw", wit: "jajar"}` 
+0

的轉義序列的要求,很難開發這個功能,如果數據有逗號,這將會失敗。示例:' 「LL:11千瓦:SW,即:jajar,ABS」' – Rajesh

+0

@Rajesh,如果是這樣,這將是一個複雜和矛盾的情況。因爲,這樣的逗號可以像「ll:11,kw:sw,jajar,機智:222」一樣位於中間。在這種情況下,我們怎麼能知道它是否是'「千瓦」:「SW,jajar」,......,'或者它的意思爲'......「jajar,才子」:222'(用逗號屬性名)?! – RomanPerekhrest

+0

問題是OP是從谷歌電子表格中讀取,所以用戶可以輸入任何數據。解析字符串會很痛苦,並會有很多漏洞。理想的方法是檢查谷歌電子表格是否提供我們可以使用並安全解析的任何特定格式的數據。你的解決方案很好,但我猜OP正在朝錯誤的方向發展。 – Rajesh

1
var mz = "ll: 11, kw: sw, wit: jajar"; 
    var str = mz.replace(/:/g, '":"'); 
    str = str.replace(/,/g, '","'); 
    str = '"' + str + '"'; 
    var str = '"ll":"11","kw":"sw" ,"wit":"jajar"'; 
    var text = '{"contents":[' + '{' + str + '}]}'; 
    obj = JSON.parse(text); 
    alert(obj.contents[0].ll + " " + obj.contents[0].kw + " " + obj.contents[0].wit); 

這工作得很好。嘗試這個。

相關問題