【问题标题】:How can I print a json string?如何打印 json 字符串?
【发布时间】:2016-05-22 16:37:01
【问题描述】:

我正在做一个学校项目(新手提醒),我需要使用 zomato 的网站根据我发送的 ID 获取美食的 ID 和名称。这是演示文件中的代码:

WebServiceConnection web = new WebServiceConnection("xxxxxxxxxxxx");
AcessoDados acesso = new AcessoDados("https://api.zomato.com/v1/cuisines.json", web);
String aces = acesso.getCuisines(310);
JSONObject obj = new JSONObject();
System.out.println(obj.get(aces));

这里调用的所有方法都是我们老师做的。

WebServiceConnection 和 AcessoDados 函数获取 Zomato API 的链接和用户密钥。 (Zomato API 需要密钥才能工作)

“acesso.getCuisines(310)”发送值“310”,方法“getCuisines”应返回一个 json 字符串,其中包含它可以在其网站上找到的所有机构(310 是葡萄牙波尔图的 ID) .

但是,它只在输出中打印“[]”(不带引号)。它应该打印如下内容:

[
{"cuisine_name":"African","cuisine_id":152},
{"cuisine_name":"American","cuisine_id":1},
{"cuisine_name":"Angolan","cuisine_id":951},
{"cuisine_name":"Cafe","cuisine_id":30},
(...)
]

我找不到问题所在,或者我是否犯了任何明显的错误。我在这里遗漏了什么吗?

【问题讨论】:

  • 如果您已经有String,为什么不直接打印呢?我错过了什么吗?你真的想解析字符串,还是打印它?
  • 如果我尝试打印字符串“aces”,无论如何它只会打印“[]”。我不确定是什么问题
  • 对不起,如果我不是具体的@DanGetz。我要做的是打印getCuisine返回的json字符串。
  • 对,但是如果字符串不包含您想要的内容,那么打印不是问题,是 API 或您用于访问 API 的类有问题,或者你是如何使用它们的。
  • JSON 对象为空。初始化时需要传入一个参数。试试JSONObject obj = new JSONObject(aces);

标签: java json string printing


【解决方案1】:

如果System.out.println(aces); 打印[],则Zomato 的API 返回一个空响应,这意味着310 不是有效的id。但是,如果 aces 打印一个非空字符串并且是一个 JSON 字符串,那么下面的解决方案应该可以工作。

您没有解析 Zomato API 收到的 JSON 字符串。相反,您正在创建一个新的JSONObject,它是空的。

尝试执行以下操作:

JSONObject obj = null;
try {
    obj = (JSONArray) JSONValue.parseWithException(aces);
    System.out.println(obj);
} catch (ParseException e) {
    e.printStackTrace();
}

假设:

【讨论】:

  • 感谢您的回复。我试过了,我得到了这个错误 Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject
  • 更新了答案。将JSONObject 替换为JSONArray,然后重试。
  • 再次感谢您。它再次打印“[]”。我越来越相信问题一定出在 API 本身。我将与我的同事交谈,看看他们是否设法正确打印。很抱歉浪费您的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多