【问题标题】:How to quickly parse this kind of object in Javascript?如何在 Javascript 中快速解析这种对象?
【发布时间】:2014-05-23 09:17:48
【问题描述】:

我正在开发一个为 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 发送的额外内容如下:

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 解析它,我可以替换它,但如果我要发送一个包含多个对象的额外内容,我想知道是否有一种方法可以快速解析这种物体。

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

{"audience": {"alias": "foo"},"notification": {"alert":"hello","android": {"extra": {"prop1": "{ \"key1\":\"val1\",\"key2\":\"val2\",\"key3\":\"val3\"}"}}},"device_types": [ “机器人”]}

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

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

如果我要发送类似的东西:

{"audience": {"alias": "foo"},"notification": {"alert":"hello","android": {"extra": {"prop1": "{ \"key1\":\"val1\",\"key2\":\"val2\",\"key3\":\"val3\"}","prop2": "{\"key4\": \"val4\",\"key5\":\"val5\",\"key6\":\"val6\"}",...,"propN": "{\"keyX\":\" valX\",\"keyY\":\"valY\",\"keyZ\":\"valZ\"}"}}},"device_types": ["android"]}

我可能会收到一个类似于以下内容的字符串:

{prop1={"key1":"val1","key2":"val2","key3":"val3"},prop2={"{"key4":"val4","key5":" val5","key6":"val6"}",...,propN={"{"keyX":"valX","keyY":"valY","keyZ":"valZ"}"}

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

【问题讨论】:

  • 您提供的第一个示例不是有效的 JSON,因为您所说的 = 符号
  • 是的,我也这么认为,但是 Urban Airship 正在向我发送有效载荷。正如我在问题中提到的,如果我们考虑在 curl 中发送的额外属性中的 n 个属性,我想知道一种将这种对象转换为 JSON 对象的快速方法。
  • 我想一个粗略的解决方法是引用“prop1”文本并将 = 替换为 :(等于冒号)但不确定这是否是您要问的?我猜你正在使用的服务有一个错误,如果这应该是它返回的有效 json 字符串,抱歉我不知道 Urban Airship 的具体情况
  • 我的问题更多地是关于我可以用什么快速有效的方式将此字符串转换为 JSON 对象。我只是在有人想知道我从哪里得到这个值时才提到 Urban Airship,但我想我应该从标签中删除它,因为它给人的印象是错误的

标签: javascript android json string parsing


【解决方案1】:

谜团解开了。

我们收到的数据并不像我们最初想象的那么奇怪。这是在 Android 中通过 Intent 传递的 extras 的常用结构。由于 Titanium 没有提供解析这些数据的方法,我们必须手动完成,方法是替换麻烦的字符并像普通 JSON 对象一样对其进行结构化。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多