Actionscript:对于似乎有效的内容,JSON解析输入无效

Actionscript:对于似乎有效的内容,JSON解析输入无效,json,actionscript-3,Json,Actionscript 3,我有下面的JSON { "extras": { "google.sent_time": 1502027522898, "custom": "{\"a\":{\"message_data\":\"\",\"message_id\":\"749\",\"message_command\":\"MESSAGE\"},\"i\":\"899ec3dd\"}", "from": "62572096498", "alert": "Rea

我有下面的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"');

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

var jsonObj:Object = str;
但是,我假设您需要解析并转换为对象的
自定义属性:

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

很少观察到:

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

var partialJsonObj={
“临时演员”:{
“谷歌发送时间”:1502027522898,
“自定义”:“{”a\“:{”消息\数据\“:\”,“消息\ id\”:“749\”,“消息\命令\“:“消息\”},\“i\”:“899ec3dd\”}”,
“发件人”:“6257296498”,
“警报”:“阅读更多…”,
“标题”:“新消息”,
“google.message_id:“0:2905559%2ECCCCAFD7ECD”
} 
};
partialJsonObj.extras.custom=JSON.parse(partialJsonObj.extras.custom);
var jsonObj:Object=partialJsonObj;
console.log(jsonObj)如果这个“JSON”是actionscript的一部分,那么它是一个,而不是一个。
该方法不起作用,因为接受JSON格式作为第一个参数,而您传递and。
如果从JSON文件加载/导入此脚本,该方法将起作用

// 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();
如果要访问“自定义”值,请取消对JSON文件中双引号的注释:

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

基本上,您所做的是将JSON的
extras.custom
部分中的字符串取消插入到JSON子对象中。这意味着JSON解析器无法识别转义字符串。您可能正在使用skyboy的JSON解析器吗?也许您应该在AS3中尝试不同的JSON解析器。@Vesper,是的,我认为解析器正在尝试解析自定义字符串。我正在使用解析器来air26。所以我想问题是为什么adobe解析器不能将内部对象识别为字符串。我想试试另一个解析器,说这个,然后检查它是否能工作。如果是,则向adobe发送错误报告;如果不是,则真正检查所接收数据的内部结构。也许里面有引号不平衡的地方。太好了,我现在明白了。我认为这不起作用,因为我的json数据存储为字符串,所以不能分配给对象,因为我只得到一个包含字符串的对象。因此,使用JSON.parser.这个问题是针对Actionscript的。