2014-10-11 82 views
1

我试图创建某种类型的json请求/响应模拟器。它是一个与外部API进行通信的nodejs应用程序。从textarea解析json到api调用

我有一个文本,其中一个可以进入的JSON代码片段如

someJson = JSON.stringify({ 
    "z": { 
      "test": "....." 
    }, 
    "v": { 
      "test2": "......" 
    } 
}); 

,并提交形式,再上岗到后端,然后调用与数据的外部API。

如何将此文本从textarea转换为对象然后我可以运行JSON.stringify?通过在文本上运行stringify,它会添加反斜杠并且不会正确删除空格。即使我要删除反斜杠和空格,它仍然是一个字符串,而外部API是非常严格的。

更新:

添加的jsfiddle

http://jsfiddle.net/b5drLnnq/1/

的问题是,有可能是有空格或空白的有效数据,但它会在删除空白的过程中得到去除或从对象的其余部分添加反斜杠。

+0

那么他们进入JSON,还是他们进入Javascript?他们进入 – lonesomeday 2014-10-11 07:38:41

+0

JSON作为文本 – archytect 2014-10-11 21:05:34

回答

0

使用正则表达式来获得括号,即JSON.stringify()之间的文本:

var textAreaText = $('#textarea_id').val(); 
var rgx = /\(([^)]+)\)/; 
var match = textAreaText.match(rgx); 

var someJson = JSON.stringify(match[1]); 

编辑:你想

var textAreaText = $('#txtArea').val(); 
//changed regex to match braces   
var rgx = /\{([^)]+)\}/;   
    var match = textAreaText.match(rgx); 
//match is an array 
jsonmatch = match[1]; 
jsonmatch = jsonmatch.replace(/(\r\n|\n|\r|\t|)/gm,""); 
//replace lost braces 
jsonstr = JSON.stringify('{'+jsonmatch+'}'); 

的jsfiddle变化:http://jsfiddle.net/sameersemna/ofjpLx57/2/

+0

我得到一个空值 http://jsfiddle.net/b5drLnnq/1/ 一两件事为好,有可能会像一个段落会包含空格的实际数据,但这种方法会从中删除所有的空格,而不是从textarea的空格? – archytect 2014-10-11 16:05:45

+0

编辑你的小提琴:http://jsfiddle.net/sameersemna/ofjpLx57/1/ – 2014-10-11 16:15:12

+0

嗨萨米尔,你编辑的版本只是回送与\ n和\ t的json obj,并返回作为字符串开头“。我得到这个 { “词汇表”:{ “称号”: “例如词汇表”, “GlossDiv”: 与 “{\ n \” 词汇表\ “:{\ n \” 称号\“:\ “example glossary \”,\ n \ t \ t \“GlossDiv \”: – archytect 2014-10-11 17:11:15

0

掌握该地区的文本$(<your selector).val()会给你的文字。你可以用自己的函数清理文本,并将其分配给一个对象并对其进行字符串化。

+0

Sameer举了一个很好的例子。 – Barry 2014-10-11 07:43:38