0

我有两个 appengine 应用程序,并且正在从一个应用程序中提供 JSONObject 的字符串表示形式,并在另一个应用程序中获取它。如果我不在 JSON 中包含 Text 对象,一切都会正常工作

这是导致问题的 JSON 对象的特定部分:

,\"text\":\u003cText: rthBlog 1\r\n\"如果你不\u0027t从历史中吸取教训,你注定要重复我......\u003e,

以下是它在字符串形式中的样子:

<文字:rthBlog 1“如果你不从历史中吸取教训,你就注定要重蹈覆辙……>

以下是将字符串放入数据存储区的相关代码[我正在使用 json.simple]:

文本 item_text = new Text("默认文本"); //它被超过 500 个字符的文本填充 JSONObject j = new JSONObject(); j.put("文本", item_text); j.put("item_links", j_links); item.setProperty("as_json", j.toJSONString()); datastore.put(项目);

这是检索它的代码,将其包装在 JSONArray 中,JSONobject 中的数组并生成字符串 [我正在使用 appengine json]:

JSONArray search_results = new JSONArray();

    for(Entity e: items)
    {
        String j = (String) e.getProperty("as_json");
        JSONObject jo;

        if(j != null)
        {
            System.out.println(TAG + ".searchItems() string as json: " + j);

            jo = new JSONObject();
            jo.put("item", j);
            search_results.add(jo);
        }
    }

    JSONObject jo = new JSONObject();
    jo.put("items", search_results);

    return jo.toJSONString();

这是提取它的代码[我正在使用 appengine json]:

尝试 { JSONObject jsonObject = new JSONObject(s); JSONArray jsonArray = (JSONArray) jsonObject.get("items");

        JSONObject array_member = null;

        JSONObject j;

        for(int i=0; i<jsonArray.length(); i++)
        {
            array_member = jsonArray.getJSONObject(i);

            System.out.println("array member" + array_member);


            /*Text text = (Text)array_member.get("text"); // 
            System.out.println(text.getValue());*/

            String s_item = array_member.getString("item");

            System.out.println("item in string form: " + s_item);


            j = new JSONObject(s_item); //This is the exception causing line
4

1 回答 1

0

您需要控制与 JSON 之间的序列化和反序列化...

含义复杂的对象表示为简单的文本或数字。

在这里,您试图序列化一个复杂的对象,这不是它的用途。确保仅序列化对象所持有的值,而不是整个对象。

Jackson是一个很好且非常强大的库,可以完全控制序列化/反序列化过程。

于 2013-07-23T07:42:29.093 回答