【问题标题】:Issue with converting string to json in Java在Java中将字符串转换为json的问题
【发布时间】:2019-10-09 08:22:31
【问题描述】:

我是 Java 新手,我正在使用 Eclipse 中的 Servlet 创建一个 Web 应用程序。 我想使用此代码将字符串转换为 JSON:

import org.json.JSONException; 
import org.json.JSONObject;

JSONObject jsonObject = null;
jsonObject = new JSONObject(STRING);

System.out.println(jsonObject.getString("PROPERTY_NAME"));

如果STRING 等于"{'status':0}" 并且jsonObject.getString("status") 给我0,它工作正常。

但我收到来自 API 的响应,例如 "{"status":0}"jsonObject.getString("status") 给了我错误,因为 jsonObject 是:

{}

错误是:

org.json.JSONException: JSONObject["status"] 未找到。

你有什么解决办法吗?

【问题讨论】:

  • 您使用的是哪个库?您给出的那个例子 - {"status":0} - 是一个有效的 JSON 字符串。
  • 我正在使用org.json.JSONExceptionorg.json.JSONObject
  • 这个库被很多人使用并且可以完成这项工作。 (有一个jsonObject.has(<keyname>))检查你是否想安全地检查它的密钥。看看“STRING”是否真的是你传递的那个字符串。
  • 其实我的回复太长了,状态只是其中的一部分。我不知道,但响应结构可能存在问题。
  • 嗯,有在线 JSON 字符串验证器。也许您可以使用其中之一来查看它是否有效。但如果字符串不是有效的 JSON 字符串,该库会抛出 JSONException。最好调试一下。你说使用jsonObject.getString("status") 会出错。你能发帖吗?您的 status 可能只是在结构中的另一个位置。

标签: java json string api response


【解决方案1】:

问题在于值不是键。我已经测试过了,它可以工作

JSONObject jsonObject = null;
jsonObject = new JSONObject("{\"status\":0}");
System.out.println(jsonObject.getInt("status"));

或者这个

 JSONObject jsonObject = null;
 jsonObject = new JSONObject("{\"status\":'0'}");
 System.out.println(jsonObject.getString("status"));

【讨论】:

  • 仅供参考,没关系。如果值是一个数字,getString 将给出它的字符串表示。如果您不相信我,请查看它的源代码:JSONObject.getString 然后this 执行String.valueOf(<your number>)
  • @KarelG 您假设 OP 使用 Android,而不是例如这里:mvnrepository.com/artifact/org.json/json。该库确实在0 上失败,而不是在'0' 上。我目前没有看到任何 OP 真正使用的提示,但由于 Stacktrace 中有 TomCat,我怀疑它是 Android。
  • 我正在 Eclipse 中创建一个 Web 应用程序(servlet)。
  • 您可以使用我在回答中提到的方法,它会起作用。我使用这个 mvnrepository.com/artifact/org.json/json 作为我的库。
  • 其实问题不在于价值。 getIntgetString 都适用于 "{\"status\":0}"。我的问题是将"{"status":0}" 正确更改为"{\"status\":0}")
【解决方案2】:

您需要在 STRING 变量中转义双引号:

"{\"status\":0}"

您可以像这样以编程方式执行此操作(我们需要调用 toString(),因为 STRING 是 StringBuilder 的一个实例):

String escapedJsonStr = STRING.toString().replaceAll("\"", "\\\"");

【讨论】:

  • 感谢您的回答。 STRINGStrngBuilder,我在 replaceAll 上给出了这个错误:The method replaceAll(String, String) is undefined for the type StringBuilder
【解决方案3】:

下面的例子我可以帮你...

for (String key: jsonObject.keySet()){ System.out.println(key); }

这将为您获取 JSON 中的密钥集。

JSONObject json_array = args.optJSONObject(0);

迭代器键 = json_array.keys();

while(keys.hasNext()) { String key = (String) keys.next(); System.out.println("密钥:" + key); System.out.println("值:" + json_array.get(key)); }

I recommend following the link for a thorough understanding of Java and JSON -- Example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2019-07-25
    • 2020-04-27
    相关资源
    最近更新 更多