{
name: 'com.riotgames.platform.summoner.PublicSummoner',
keys: [ 'internalName', 'dataVersion', 'acctId', 'name', 'profileIconId', 'revisionDate', 'revisionId', 'summonerLevel', 'summonerId', 'futureData' ],
object: {
internalName: 'mrquackers',
dataVersion: 0,
acctId: { value: 34117327 },
name: 'MrQuackers',
profileIconId: 502,
revisionDate: Tue, 30 Oct 2012 19:38:32 GMT,
revisionId: { value: 0 },
summonerLevel: { value: 30 },
summonerId: { value: 20933307 },
futureData: null
},
encoding: 0
}
(由编辑添加的换行符和缩进;不是响应的一部分)
这是来自RTMP数据包的响应,我不确定如何解析它。 是否有一个PHP库或我可以将其转换为像json一样容易解析的东西?
答案 0 :(得分:1)
没有。如果您不知道它使用的语言,则无法自动解析响应。
虽然响应看起来像,但它不是。它甚至不是关闭到JSON。你不能只引用密钥使它成为有效的JSON。
除revisionDate
外,似乎是有效的Javascript,但谁知道呢?
解析器需要知道它可能遇到的每种数据类型。没有人知道答案中会出现什么。除非您找到此格式的文档,否则您永远不会知道您可能会遇到什么。
你理论上 能够解析你认为这种反应的语言。但
<强>结论:强>
您不知道响应者谈论的语言。这意味着您无法解析它。首先找到文档,然后谈论解析。
答案 1 :(得分:0)
如果您使用Flash / AS3接收此数据包,则可以使用as3corelib JSONDecoder类。
以下是使用您提供的JSON示例的示例:
import com.adobe.serialization.json.JSON;
var raw:String = "{ name: 'com.riotgames.platform.summoner.PublicSummoner', keys: [ 'internalName', 'dataVersion', 'acctId', 'name', 'profileIconId', 'revisionDate', 'revisionId', 'summonerLevel', 'summonerId', 'futureData' ], object: { internalName: 'mrquackers', dataVersion: 0, acctId: { value: 34117327 }, name: 'MrQuackers', profileIconId: 502, revisionDate: Tue, 30 Oct 2012 19:38:32 GMT, revisionId: { value: 0 }, summonerLevel: { value: 30 }, summonerId: { value: 20933307 }, futureData: null }, encoding: 0 }";
// 1. Add quotes to all keys. 2. Wrap string around date object. 3. Replace single quotes with double quotes.
raw = raw.replace(/([\w]+): /g, "'$1': ").replace(/\w+, \d* \w+ \d* \d*:\d*:\d* \w+/g, "'$&'").replace(/'/g, "\"");
var json:Object = JSON.decode(raw, false);
var date:Date = new Date(json.object.revisionDate);
trace(json.name); // "com.riotgames.platform.summoner.PublicSummoner"
trace(date.month); // 9
答案 2 :(得分:0)
这就是我要做的。这里唯一的问题是使用revisionDate,最好将其转换为ActionScript处理的时间戳(如果你愿意,还可以转换为字符串),所以我会使用preg_replace_callback()
函数来改变前一个条件或后一个条件的preg_replace()
函数:
// this is for numeric timestamp: 1351625912
$str = preg_replace_callback('~(?<=\srevisionDate:\s).+?(?=,\n|,\r|,\r\n)~',
create_function('$m','return strtotime($m[0]);'),$str);
// alternatively, you can wrap it with single quotes: 'Tue, 30 Oct 2012 19:38:32 GMT'
//$str = preg_replace('~(?<=\srevisionDate:\s).+?(?=,\n|,\r|,\r\n)~',"'$0'",$str);
echo $str;