【问题标题】:JSONArray.toString() not working in JavaJSONArray.toString() 在 Java 中不起作用
【发布时间】:2015-11-23 18:05:35
【问题描述】:

我尝试使用 JSON 将数据从我的 android 客户端发送到我的网络服务器。

我遇到了一个问题。由于现在调试了两天多,看来是JSONArray类的toString方法不能正常工作的问题。

我有不能使用 GSON 库的限制。因此,我只处理 JSONArray 和 JSONObject 库。

我按如下方式构造我的 JSONArray:

ArrayList<SMS> SMSArray = SMSHelper.getSMSDetails(context, rEmail, rPhoneNum);
JSONArray jSMSArray = new JSONArray();

for(int i = 0; i < SMSArray.size(); i++) {
    jSMSArray.put(i, SMSArray.get(i).toJSON());
    Log.wtf("::trace", "JSONArray.get(i).toString(): " + jSMSArray.get(i).toString());
}

Log.wtf("::trace", "JSONArray.toString():" + jSMSArray.toString());

在循环内部,我从 JSONArray 和 ArrayList 中打印出完全相同的字符串。所以似乎将 ArrayList 复制到 JSONArray 工作正常。加上循环后两个 Array 的大小是相同的。

尽管如此,当我在循环后使用 JSONArray.toString() 时,令人惊讶的是,字符串并不完整,字符串仅打印出包含我的 JSONArray 的 285 个 JSONObject 中的几个 JSONObject!

我想将此 JSONARRAY 发送到我的服务器以在服务器端对其进行解析,但由于 JSONArray 不正确。服务器无法解析接收到的字符串链。 收到的字符串链如下所示: [{object1}, ..., {objecti}, {"id", $myId, "thread", $myThread, "content", "嘿

我真的希望你们中的一个能够帮助我。这让我发疯;首先我使用语法for(Object object: ObjectArray),但后来我了解到 JSONArray 不是可迭代对象,所以我尝试直接将 JSONObject 放入特定索引中,但得到了相同的结果。

这段代码是我硕士论文的一部分,我在这个细节上浪费了很多时间......:/

真的,期待你的回答。

晚安,

比约恩

编辑: 我的 JSONObject 是存储在 android 手机中的 SMS。我将它们转换为 JSONObject 的功能如下:

public JSONObject toJSON() {
    JSONObject jSMS = new JSONObject();
    try {
        jSMS.put("id", this.id);
        jSMS.put("thread", this.thread);
        jSMS.put("rEmail", this.rEmail);
        jSMS.put("rPhoneNum", this.rPhoneNum);
        jSMS.put("sPhoneNum", this.sPhoneNum);
        jSMS.put("sName", this.sName);
        jSMS.put("date", this.date);
        jSMS.put("content", this.content);
        jSMS.put("type", this.type);
    } catch (JSONException e) {
        Log.wtf("::trace", Log.getStackTraceString(e));
    }
    return jSMS;
}

编辑1: 当我遍历我的 JSONArray 并使用 JSONArray.getJSONObject(i).toString() 一切正常时,它会打印出数组的全部内容,当我调用 JSONArray.toString() 方法时,它只会打印出 JSONArray 的开头。我真的开始厌倦了。我不知道什么会导致这样的错误。

【问题讨论】:

  • 尝试通过简单替换 JSONObject 来运行您的代码。工作得很好。尝试在运行 for 循环之前记录数组的大小,以确保它是 295 项长。
  • 好吧,似乎在构造 JSONArray 的循环之后,其中确实有 295 个项目,所以我不明白为什么当我对整个 JSONArray 使用 toString() 方法时,它只是打印出 JSONArray 的开头并切入 JSONObject 的中间。因此,我的服务器无法理解接收到的 JSON 内容,也无法将数据存储在我的数据库中……我存储在 JSONArray 中的 JSONObject 来自 long、int、string 和 Date 类型,如果有帮助的话!跨度>
  • 你能给你的一个对象举一个 json 字符串的例子吗?我假设 {object1} 是一种简化,因为它不是有效的 JSON 字符串。
  • @CurlyCorvus,我改进了我的问题 :)
  • 你有调试器吗?调试器中jSMSArray.toString() 的值是多少? (不是日志)

标签: android json serialization client object-to-string


【解决方案1】:

What is the size limit for Logcat and how to change its capacity?

每个 logcat 条目都限制为一定数量的字符(取决于您的 android 设备)。一个 285 个对象长的 JSON 数组很可能对于单个 logcat 条目来说太长了,所以它只是在中间切断它。我不认为你的 json 对象有问题(或者如果有,那不是你找到的那个)

【讨论】:

  • 看来问题不是来自那里,因为在我的服务器端我收到了完全相同的截断数组......:/我真的不知道它来自哪里。为了调试它,我尝试了所有我能想到的方法!
  • 现在,很可能在创建 JSONArray 时发生错误,并且 Array 的结构在 JSON 中没有正确格式化,所以当我在其上调用 toString() 方法时一个问题。
  • 确实在挖掘了这个问题 4 天之后,我尝试在服务器端的一个文件中而不是在 logcat 中打印出我的 Array 的内容,然后我得到了全部内容。所以 logcat 没有正确打印出 JSONArray! :)
猜你喜欢
  • 2018-05-15
  • 2015-05-27
  • 2021-09-20
  • 2014-02-12
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多