2017-08-06 71 views
2

我有以下的JSON的ActionScript:什麼似乎有效

{ 
    "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); 

無效的JSON解析輸入給出了錯誤:

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"'); 
+1

基本上你在做什麼是unconvert在'的extras.custom'部分的字符串將JSON轉換爲JSON子對象。這意味着JSON解析器無法識別轉義字符串。您是否使用skyboy的JSON解析器?也許你應該在AS3中嘗試一個不同的JSON解析器。 – Vesper

+0

@Vesper,是的,我認爲解析器試圖解析字符串自定義。我使用解析器到Air 26.所以我想問題是爲什麼Adobe解析器不能將內部對象識別爲字符串。 – Mar

+0

我想嘗試一個替代解析器,說這一個https://github.com/blooddy/blooddy_crypto並檢查它是否會工作。如果是的話,發送一個錯誤報告給Adobe,如果沒有,真正審查收到的數據的內部。也許裏面有一些報價不平衡。 – Vesper

回答

2

幾點意見:

  • JSON在OP中提供的看起來像是JSON object而不是JSON string。因此,不需要解析整個對象。
  • 由於partialJsonObj.extras.custom是一個JSON字符串解析它轉換成JSON對象。

DEMO

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);

+0

太好了,我現在明白了。 – Mar

1

我相信str是一個JavaScript對象了,所以沒有來解析,你可以簡單地分配給它喜歡:

var jsonObj:Object = str; 

不過我會假設你需要解析並轉換爲對象的custom屬性:

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

我不認爲這是有效的,因爲我的JSON數據存儲爲一個字符串,所以它不能被分配給一個對象,因爲我只是得到一個包含該字符串的對象。因此使用JSON.parser。 – Mar

+0

這個問題是針對Actionscript的。 – Mar

2

如果這個 「JSON」 是你的動作的一部分,它是一個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(); 

如果您要訪問的「定製」值,取消雙引號中的JSON文件:

"custom": {"a":{"message_data":"","message_id":"749","message_command":"MESSAGE"},"i":"899ec3dd"}, 
相關問題