如何在Javascript中快速解析这种对象?

时间:2014-04-09 22:12:01

标签: javascript android json string parsing

我正在开发一个针对Android开发并使用Titanium Studio 3.2.0和Titanium SDK 3.2.0.GA的项目。

我使用Appcelerator Urban Airship模块,我可以毫无问题地连接,主要问题是我从Urban Airship收到的有效载荷如下:

{prop1={"key1":"val1","key2":"val2","key3":"val3"}}

这是一个字符串,而不是像你在iOS中那样的对象。

通过卷曲发送的额外内容如下:

curl -X POST -u "appkey:secret" \
   -H "Content-Type: application/json" \
   -H "Accept: application/vnd.urbanairship+json; version=3;" \
   --data '{"audience": {"alias": "foo"},"notification": {"alert":"hello","android": {"extra": {"prop1": "{\"key1\":\"val1\",\"key2\":\"val2\",\"key3\":\"val3\"}"}}},"device_types": ["android"]}' \
   https://go.urbanairship.com/api/push/

这是一个有效的JSON对象吗?我无法用JSON.parse解析它,因为 = 符号,我可以替换它但是如果我要发送包含多个对象的额外内容,我想知道是否有快速解析这种对象的方法。

为了清楚起见,这就是我发送的内容:

{"观众":{"别名":" foo"},"通知":{"警报&#34 ;:"你好"," android":{"额外":{" prop1":" {\& #34; KEY1 \":\" VAL1 \" \" KEY2 \":\" val2的\" \&#34 ; key3 \":\" val3 \"}"}} }," device_types":[" android" ]}

粗体是我通过Urban Airship发送的有效载荷。我在我的应用上收到的内容如下:

{PROP1 = {" KEY1":" VAL1"" KEY2":" val2的"" KEY3&#34 ;:" VAL3"}}

如果我发送的内容如下:

{"观众":{"别名":" foo"},"通知":{"警报&#34 ;:"你好"," android":{"额外":{" prop1":" {\& #34; KEY1 \":\" VAL1 \" \" KEY2 \":\" val2的\" \&#34 ; key3 \":\" val3 \"}"," prop2":" {\" key4 \" :\" VAL4 \" \" KEY5 \":\" val5 \" \"键6 \":\ " val6 \"}",...," propN":" {\" keyX \":\&#34 ; valX \" \" keyY \":\" VALY \" \" keyZ \":\" valZ \"}"}} }," device_types":[" android"]}

我可能会收到一个类似于:

的字符串

{PROP1 = {" KEY1":" VAL1"" KEY2":" val2的"" KEY3&#34 ;:" VAL3"},PROP2 = {" {" KEY4":" VAL4"" KEY5":&#34 ; val5""键6":" VAL6"}",...,propN = {" {" keyX&#34 ;: " valX"" keyY":" VALY"" keyZ":" valZ"}"}

我想知道是否有一种快速方法可以将看起来像这样的字符串转换为JSON对象。我知道字符串不是一个有效的JSON对象,但如果Urban Airship发送的东西看起来像那样,那么应该有办法处理一个看起来像这样的对象。

1 个答案:

答案 0 :(得分:0)

这个谜就解决了。

我们收到的数据并不像我们最初想的那么奇怪。这是Android中Intents传递的额外内容的常用结构。由于Titanium没有提供解析这些数据的方法,因此我们必须通过替换麻烦的字符并将其结构化为普通的JSON对象来手动完成。