如何将长字符串转换为JSON对象

How do I convert long string into JSON Object?

本文关键字:JSON 对象 转换 字符串      更新时间:2023-09-26

我需要将字符串转换为从学习管理系统返回的JSON对象。一旦字符串成为JSON对象,我将把它作为我正在编写的jQuery插件的一部分。以下是我目前所拥有的:

要转换的回调:(我无法访问服务器端代码(它驻留在LMS(AICC)上),我只是通过javascript访问它,回调在下面,所以我只能使用此文本。我相信每行后面都有,但这正是我收到的格式。。。。除了文本什么都没有。)

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循环的情况下实现这一点。这可能吗?谢谢

如果你的行确实以"''n"结尾,那么你可以试试这个:

var obj = {};
theTextYouGetFromTheServer.replace(/([^=]+)=(.*)'n/g, function(_, name, value) {
  obj[name] = value;
});

如果你的名字可以包含"=",那当然是个问题。

这样做的目的是匹配名称/值行的基本格式(name=value)并构建一个对象。字符串的JavaScript .replace()方法为每个连续的匹配重复调用该函数,参数是整个匹配(这里我们不关心),然后是每个匹配的组(regex中parens中的内容)。

试试这个:

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]),这就不起作用了。

刚刚发布我的版本。如果不好,请随时纠正我。

function toJSON (str) {
     return  '{''' + str.replace(/=/g, "':'").replace(/'n/g, "','") + '''}';
}