Actionscript:无效的JSON解析输入似乎有效

时间:2017-08-06 14:12:57

标签: json actionscript-3

我有以下JSON

{
    "extras": {
        "google.sent_time": 1502027522898,
        "custom": "{\"a\":{\"message_data\":\"\",\"message_id\":\"749\",\"message_command\":\"MESSAGE\"},\"i\":\"899ec3dd\"}",
        "from": "62572096498",
        "alert": "Read More...",
        "title": "New message",
        "google.message_id": "0:2905559%2ecccafd7ecd"
     } 
}

使用

var jsonObj:Object = JSON.parse(str);

给出错误:

SyntaxError: Error #1132: Invalid JSON parse input.
    at JSON$/parseCore()
    at JSON$/parse()

我不明白为什么会这样,JSON是有效的。

其他信息,

我尝试过的解决方案如下,尽管之前和之后都有效。

var clean:String = str.split("\\").join('');
clean = clean.replace('"custom":"{"a"', '"custom":{"a"');
clean = clean.replace('"}","from"', '"},"from"');

3 个答案:

答案 0 :(得分:2)

很少有观察结果:

  • OP中提供的JSON看起来像JSON object而不是JSON string。因此,无需解析整个对象。
  • 由于partialJsonObj.extras.custom是一个JSON字符串,因此将其解析为转换为JSON对象。

<强>样本

&#13;
&#13;
var partialJsonObj = {
    "extras": {
        "google.sent_time": 1502027522898,
        "custom": "{\"a\":{\"message_data\":\"\",\"message_id\":\"749\",\"message_command\":\"MESSAGE\"},\"i\":\"899ec3dd\"}",
        "from": "62572096498",
        "alert": "Read More...",
        "title": "New message",
        "google.message_id": "0:2905559%2ecccafd7ecd"
     } 
};

partialJsonObj.extras.custom = JSON.parse(partialJsonObj.extras.custom);

var jsonObj:Object = partialJsonObj;

console.log(jsonObj);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

如果这是&#34; JSON&#34;是你的动作内容的一部分,它是Object,而不是JSONJSON.parse方法无法正常工作,因为接受JSON格式的String作为第一个参数,而您又通过了Object。 如果从JSON文件加载/导入此脚本,JSON.parse方法将起作用。

// importing the external JSON file
function loadJSON() {
    var loader:URLLoader = new URLLoader();
    loader.addEventListener(Event.COMPLETE, decodeJSON);
    loader.load(new URLRequest("test.json"));
}

// converting to actionscript Object
function decodeJSON(e:Event):void {
    var loader:URLLoader = URLLoader(e.target) ;
    var jsonObj:Object = JSON.parse(loader.data);
    trace(jsonObj["extras"]["custom"]["a"]["message_id"]);
}

loadJSON();

如果您想访问&#34; custom&#34;值,取消注释JSON文件中的双引号:

  "custom": {"a":{"message_data":"","message_id":"749","message_command":"MESSAGE"},"i":"899ec3dd"},

答案 2 :(得分:1)

我相信str已经是一个javascript对象了,所以没有什么要解析的,你可以简单地分配它:

var jsonObj:Object = str;

但是我假设您需要解析并转换为对象custom属性:

a.extras.custom = JSON.parse("{\"a\":{\"message_data\":\"\",\"message_id\":\"749\",\"message_command\":\"MESSAGE\"},\"i\":\"899ec3dd\"}")