2016-05-04 40 views
1

我正在解析部分來解析字符串值到一個對象的字符串。JavaScript解析一個字符串到對象

我想到了一個辦法做到這一點呼籲substr()幾次,但如果有任何辦法做到這一點更清楚?

例如,當我輸入的字符串

USER='Howe', TEXT='foo' 

USER='HOWE' TEXT='foo' 

USER='HOWE',TEXT='foo' 

的功能後,對象會是這樣:

{USER:'HOWE, TEXT='foo'}; 
+0

我有點困惑。你是說你想將多次出現的'USER'和'TEXT'分組爲每個對象的數組?所以'USER ='HOWE',TEXT ='foo',USER ='2',TEXT ='3''將會是'[{USER:'HOWE',TEXT:'foo'},{USER:'2' ,TEXT:'3'}]' – ste2425

+0

你能澄清一下嗎?你想使用array.push(string)將一個字符串添加到數組中嗎?或使用object.property = string更改對象中某個條目的值; ? – Iblob

+0

對不起,只是編輯問題,我想解析一個字符串到索引和屬性的對象,謝謝。 @ ste2425 –

回答

2

my previous answer返工。

function toObj(str) { 
    const a = str.split(/[,\s]+/); 
    return a.reduce((p, c) => { 
    const kv = c.replace(/'/g, '').split('='); 
    p[kv[0]] = kv[1]; 
    return p; 
    }, {}); 
} 

toObj("USER='Howe', TEXT='foo'"); // { USER: "Howe", TEXT: "foo" } 
toObj("USER='Howe',TEXT='foo'"); // { USER: "Howe", TEXT: "foo" } 
toObj("USER='Howe' TEXT='foo'"); // { USER: "Howe", TEXT: "foo" } 

DEMO

+0

非常感謝你,這是一個很好的解決方案 –

-1

如果你真的只是想在這兩個值拆分到一個數組,你可以這樣做:

​​3210

但實際上聽起來像是你想用鍵,值對將它改變成一個對象,而不是一個數組。

你能更具體嗎?什麼是你想要解析的確切字符串?

+0

我剛剛更新這個問題,我想要的是將字符串解析爲一個帶有索引和鍵的對象,非常感謝你 –

1

這不是JSON的非常有效的對象語法。你可以做這樣的:

var text = '{ "USER":"Howe", "TEXT":"foo" }'; 
var obj = JSON.parse(text); 
console.log(text, obj); 

然後你就可以通過obj.USERobj.TEXT只是參考性質。

編輯:經過討論...

我建議做一些像下面這樣,如果你想讓用戶對兩個字段進行搜索的能力(可以延長該儘可能多的領域你當然希望)。

<script> 
function search() { 
    var userValue = document.getElementById('txtUser').value; 
    var textValue = document.getElementById('txtText').value; 
    var jsonText = '{ "USER":"' + userValue + '", "TEXT":"' + textValue + '" }'; 
    console.log(jsonText); 
    var json = JSON.parse(jsonText); 
    console.log(json); 

    // Do whatever you wish with your created object here... 
} 
</script> 

<input id="txtUser" value="foo" type="text"> 
<input id="txtText" value="bar" type="text"> 
<button onclick="search();">Submit</button> 
+0

字符串實際上是用戶執行搜索功能的。所以我不希望用戶輸入JSON語法之類的語法。 –

+1

所有你需要的就是從用戶那裏獲取值並自己構造JSON文本。不要讓你的用戶輸入那樣的文字。兩個文本框,獲取值,構建JSON文本,解析它,完成工作:) – ManoDestra

+0

好的,我正在爲我的web應用程序實現一個搜索模塊,並且有一個搜索欄就像Twitter一樣,我想支持高級搜索功能..這就是爲什麼我問這個問題..我知道你的建議是一個更好的解決方案..但我不是一個有經驗的JavaScript編碼器,所以.. –

0

您可以使用正則表達式來解析出從輸入字符串鍵和值:

function convert(s) { 
    var m = s.match(/USER='(.*)'.*TEXT='(.*)'/); 
    return { 
    USER: m[1], 
    TEXT: m[2] 
    } 
} 

console.log(convert("USER='HOWE' TEXT='foo'")); 

match表達式使用分組(包裹在括號中的「匹配」)來捕獲值,然後結束於m陣列。

convert函數將返回一個JavaScript對象。如果您希望將其轉換爲JSON字符串,請使用JSON.parse

JSBin:https://jsbin.com/fefufehibo/edit?js,console