java - 格式错误的 JSON 字符串能否成功解析?

标签 java json

这是一个示例字符串:

String s = "{\"source\": \"another \"quote inside\" text\"}";

解析这个问题的最佳方法是什么?我已经尝试过 4 个解析器:json-libjson-simplegsonGrails 内置 JSON 解析器.

我正在使用 Java,我想知道是否有办法在捕获 MalformedJsonException 或其他内容后修复字符串。

注意:或者这可能是 Twitter API 中的一个错误?以下是示例响应字符串:

{
    "coordinates": null,
    "user": {
        "is_translator": false,
        "show_all_inline_media": false,
        "following": null,
        "geo_enabled": false,
        "profile_background_color": "C0DEED",
        "listed_count": 11,
        "profile_background_image_url": "http://a3.twimg.com/a/1298064126/images/themes/theme1/bg.png",
        "favourites_count": 4,
        "followers_count": 66,
        "contributors_enabled": false,
        "statuses_count": 1078,
        "time_zone": "Tokyo",
        "profile_text_color": "333333",
        "friends_count": 51,
        "profile_sidebar_fill_color": "DDEEF6",
        "id_str": "107723125",
        "profile_background_tile": false,
        "created_at": "Sat Jan 23 14:16:03 +0000 2010",
        "profile_image_url": "http://a3.twimg.com/profile_images/652140488/--------------_normal.jpg",
        "description": "Mu8ecdu56e3u306eu56e3u9577u3068u30eau30fcu30c0u30fcu3067u3059u3002u8da3u5473u306fu7af6u99acu306eu4e88u60f3u3068u30b0u30e9u30c3u30d7u30eau30f3u30b0u3068u6253u6483u3092u30e1u30a4u30f3u3068u3057u3066u3044u307eu3059u3063uff01",
        "location": "u5bccu5c71u770c",
        "notifications": null,
        "profile_link_color": "0084B4",
        "protected": false,
        "screen_name": "mattsun0209",
        "follow_request_sent": null,
        "lang": "ja",
        "profile_sidebar_border_color": "C0DEED",
        "name": "u307eu3063u3064u3093",
        "verified": false,
        "id": 107723125,
        "profile_use_background_image": true,
        "utc_offset": 32400,
        "url": null
    },
    "in_reply_to_screen_name": null,
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "text": "u3042u30fcu3001u7d50u819cu708eu306bu306au3063u3066u3057u307eu3063u305fu3002",
    "contributors": null,
    "retweeted": false,
    "in_reply_to_user_id_str": null,
    "retweet_count": 0,
    "source": "u003Ca href="http: //twtr.jp" rel="nofollow"u003EKeitai Webu003C/au003E",
    "id_str": "42128197566861312",
    "created_at": "Mon Feb 28 07:45:19 +0000 2011",
    "geo": null,
    "entities": {
        "hashtags": [],
        "user_mentions": [],
        "urls": []
    },
    "truncated": false,
    "place": null,
    "id": 42128197566861312,
    "favorited": false
}

记下source属性:

"source": "u003Ca href="http: //twtr.jp" rel="nofollow"u003EKeitai Webu003C/au003E"

最佳答案

恐怕这是典型的“垃圾进,垃圾出”的情况。 JSON 无效,因此您无法正确解析它。您只能猜测它的含义。现在,我们人类可以很好地猜测(显然)其意图,但这在解析器级别要困难得多。

如果您知道自己始终会获得此无效的 source 属性,则可以在反序列化字符串之前对其进行预处理,但真正的解决方法必须是在无效数据的源头 - Twitter 或任何推特(可以说)正在提供它。我假设这是您收到的实际字符串数据,而不是经过处理的形式。

关于java - 格式错误的 JSON 字符串能否成功解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5142121/

相关文章:

java - 如何让二维数组行并排打印为列?

java - 空对象引用上的“java.lang.String org.jsoup.nodes.Element.text()”

Java扫描器多个/多个分隔符条件

java - 使用改造转换特殊 JSON 响应

javascript - 听说过一个框架/应用程序只从数据库返回您需要的内容吗?

java - 如何为空值注册 Spring 转换器?

java - 堆转储如何收集数据

javascript - 如何正确地将数据从 jQuery 和 Ajax 附加到 HTML?

python - 将从 REST api 检索到的数据存储到 python 中的变量中

javascript - 如何在 ajax javascript 中获取数据类型 json 的特定值键对?