Java 如何解码JSONObject

Java 如何解码JSONObject,java,json,spring,Java,Json,Spring,这个问题与我以前的经历有关 我可以成功地从我的spring控制器的URL中获取json格式的字符串 现在我必须解码它 所以我喜欢下面的内容 @RequestMapping("/saveName") @ResponseBody public String saveName(String acc) {jsonObject = new JSONObject(); try { System.out.println(acc); org.json.JSONObject conv

这个问题与我以前的经历有关

我可以成功地从我的spring控制器的URL中获取json格式的字符串

现在我必须解码它

所以我喜欢下面的内容

@RequestMapping("/saveName")
@ResponseBody
public String saveName(String acc)
{jsonObject = new JSONObject();
    try
    {
   System.out.println(acc);
    org.json.JSONObject convertJSON=new org.json.JSONObject(acc);

    org.json.JSONObject  newJSON = convertJSON.getJSONObject("nameservice");
    System.out.println(newJSON.toString());
    convertJSON = new org.json.JSONObject(newJSON.toString());
    System.out.println(jsonObject.getString("id"));

    }
    catch(Exception e)
    {
        e.printStackTrace();jsonObject.accumulate("result", "Error Occured ");
    }
    return jsonObject.toString();
}
这是JSON字符串
{“nameservice”:[{“id”:7413,“name”:“ask”},{“id”:7414,“name”:“josn”},{“id”:7415,“name”:“john”},{“id”:7418,“name”:“rjhjr”}

当我运行代码时,我得到了错误

org.json.JSONException: JSONObject["nameservice"] is not a JSONObject.

我做错了什么?

它不是一个
JSONObject
,而是一个
JSONArray

根据你的问题:

{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "RjhjhjR" } ] }
nameservice键后的
[
告诉您它是一个数组。它需要是
{
来指示对象,但它不是

因此,将您的代码更改为将其用作
JSONArray
,然后迭代其中的内容以获得
JSONObjects
,例如

JSONArray nameservice = convertJSON.getJSONArray("nameservice");
for (int i=0; i<nameservice.length(); i++) {
   JSONObject details = nameservice.getJSONObject(i);
   // process the object here, eg
   System.out.println("ID is " + details.get("id"));
   System.out.println("Name is " + details.get("name"));
}
JSONArray nameservice=convertJSON.getJSONArray(“nameservice”);

对于(inti=0;i它不是一个
JSONObject
,它是一个
JSONArray

根据你的问题:

{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "RjhjhjR" } ] }
nameservice键后的
[
告诉您它是一个数组。它需要是
{
来指示对象,但它不是

因此,将您的代码更改为将其用作
JSONArray
,然后迭代其中的内容以获得
JSONObjects
,例如

JSONArray nameservice = convertJSON.getJSONArray("nameservice");
for (int i=0; i<nameservice.length(); i++) {
   JSONObject details = nameservice.getJSONObject(i);
   // process the object here, eg
   System.out.println("ID is " + details.get("id"));
   System.out.println("Name is " + details.get("name"));
}
JSONArray nameservice=convertJSON.getJSONArray(“nameservice”);

对于(int i=0;i当“nameservice”是一个JSONObject数组而不是对象本身时,您似乎正在尝试获取JSONObject。您应该尝试以下操作:

JSONObject json    = new JSONObject(acc);
JSONArray  jsonarr = json.getJSONArray("nameservice");

for (int i = 0; i < jsonarr.length(); i++) {
  JSONObject nameservice = jsonarr.getJSONObject(i);
  String id   = nameservice.getString("id");
  String name = nameservice.getString("name");
}
JSONObject json=新的JSONObject(acc);
JSONArray jsonarr=json.getJSONArray(“名称服务”);
for(int i=0;i
当“nameservice”是一个JSONObject数组而不是对象本身时,您似乎正在尝试获取JSONObject。您应该尝试以下方法:

JSONObject json    = new JSONObject(acc);
JSONArray  jsonarr = json.getJSONArray("nameservice");

for (int i = 0; i < jsonarr.length(); i++) {
  JSONObject nameservice = jsonarr.getJSONObject(i);
  String id   = nameservice.getString("id");
  String name = nameservice.getString("name");
}
JSONObject json=新的JSONObject(acc);
JSONArray jsonarr=json.getJSONArray(“名称服务”);
for(int i=0;i
如果您已经有了Spring框架,我不明白为什么要手动操作

查看并相应地配置ServletDispatcher。Spring将自动将对象转换为JSON字符串,反之亦然

之后,控制器方法将如下所示:

@RequestMapping("/saveName")
@ResponseBody
public Object saveName(@RequestBody SomeObject obj) {
    SomeObject newObj = doSomething(obj);
    return newObj;
}

如果您已经有了Spring框架,我不明白为什么要手动执行它

查看并相应地配置ServletDispatcher。Spring将自动将对象转换为JSON字符串,反之亦然

之后,控制器方法将如下所示:

@RequestMapping("/saveName")
@ResponseBody
public Object saveName(@RequestBody SomeObject obj) {
    SomeObject newObj = doSomething(obj);
    return newObj;
}

名称服务是JSONArray[]表示JSONARRAY您为什么喜欢使用整个字符串,然后编写解析逻辑?也许您应该阅读@hofan41感谢您的建议,Android人员将使用此格式向我发送数据,并且我在数据库中有存储id和名称。因此,我将JSON字符串转换为JSON对象,然后对其进行解码。如果您有其他方法然后请以回复方式发布名称服务是JSONArray[]表示JSONARRAY您为什么喜欢使用整个字符串,然后编写解析逻辑?也许您应该阅读@hofan41感谢您的建议,Android人员将使用此格式向我发送数据,并且我在数据库中有存储id和名称。因此,我将JSON字符串转换为JSON对象,然后对其进行解码。如果您有其他方法然后,请作为答案发布感谢您的回答,您能告诉我如何获得名称和id吗?您需要迭代数组,从中提取JSONObject。请参阅edit如果给我
[{“id”:7413,“name”:“ask”},{“id”:7414,“name”:“josn”},{“id”:7415,“name”:“john”},{“id”:7418,“name”:“rjhjr”}]
然后怎么做。请告诉梅汉克斯答案,你能告诉我如何获得名称和id吗?你需要迭代数组,从中提取JSONObject。请参见编辑如果给我
[{“id”:7413,“name”:“ask”},{“id”:7414,“name”:“josn”},{“id”:7415,“name”:“john”},{“id”:7418,“name”:“rjhjr”}]
然后怎么做。请告诉mesorry我不知道如何调查此示例,因为这是解决您问题的常用方法:抱歉,我不知道如何调查此示例,因为这是解决您问题的常用方法: