我需要将字符串转换为从学习管理系统返回的JSON对象。一旦字符串是一个JSON对象,我将把它用作我正在编写的jQuery插件的一部分。以下是我到目前为止的情况:
回调转换:(我无法访问服务器端代码(它驻留在LMS(AICC)上,我只是通过javascript访问它,回调在下面,所以我我坚持使用这个文本。我确实相信每行后都有\ n,但这是我收到的确切格式......除了文本之外什么都没有。)
ERROR=0
ERROR_TEXT=Successful
VERSION=2.2
AICC_DATA=[CORE]
STUDENT_ID=01234567
STUDENT_NAME=Doe, John R
SCORE=83
TIME=02:35:37
CREDIT=C
LESSON_LOCATION=page_1
LESSON_STATUS=INCOMPLETE
[Core_Lesson]
[Objectives_Status]
我正在寻找将其转换为:
{'ERROR':'0','ERROR_TEXT':'Successful','VERSION':'2.2','AICC_DATA':'[CORE]','STUDENT_ID':'01234567','STUDENT_NAME':'Doe, John R','SCORE':'83','TIME':'02:35:37','CREDIT':'C','LESSON_LOCATION':'page_1','LESSON_STATUS':'INCOMPLETE'}
这是我正在使用的jQuery :(如你所见,我正在尝试在没有循环的情况下执行此操作:)
$.get(_url,{command:"GetParam",version:"2.2",session_id:_sid},function(response)
{
/* this is my attempt at using a RegExp */
var match = RegExp('[?&]' + urlVar + '=([^&]*)').exec(response);
/* I thought maybe I could do it using an eval(), but I get an error -> Expected "]" */
var t = eval('{['+response+']}');
});
我相信我可以使用循环来解决这个问题,但我真的希望在没有for循环的情况下使用它。这甚至可能吗?谢谢!
答案 0 :(得分:2)
如果您的行以“\ n”结尾,那么您可以尝试:
var obj = {};
theTextYouGetFromTheServer.replace(/([^=]+)=(.*)\n/g, function(_, name, value) {
obj[name] = value;
});
如果你的名字可以包含“=”,那当然是个问题。
它的作用是匹配您的名称/值行的基本格式(NAME = VALUE)并构建一个对象。字符串的JavaScript .replace()
方法调用每次连续匹配重复运行,参数是整个匹配(这里我们不关心),然后是每个匹配的组(正则表达式中的parens中的东西)
答案 1 :(得分:0)
试试这个:
var text = "ERROR=0\nERROR_TEXT=Successful\nVERSION=2.2\nAICC_DATA=[CORE]\nSTUDENT_ID=01234567\nSTUDENT_NAME=Doe, John R\nSCORE=83\nTIME=02:35:37\nCREDIT=C\nLESSON_LOCATION=page_1 \nLESSON_STATUS=INCOMPLETE";
eval('var object = {' + text.replace(/([^=\n]+)=([^\n]+)/g, '"$1":"$2",').replace(/\n/g, "") + '}');
alert(object.SCORE);
如果你有最后两行([Core_Lesson]
和[Objectives_Status]
),这不起作用。
答案 2 :(得分:0)
只需发布我的版本。如果不好,请随时纠正我。
function toJSON (str) {
return '{\'' + str.replace(/=/g, "':'").replace(/\n/g, "','") + '\'}';
}