Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组转换为json_Java_Json - Fatal编程技术网

Java 将数组转换为json

Java 将数组转换为json,java,json,Java,Json,我有一个多维数组,它有整数值和字符串值。我想将数组转换为json格式,并将其发送回ajax函数。我正在尝试打印要检查的数组内容,但无法执行此操作 Os[] o1 = new os[]; o1[0].os_name = "xyz"; o1[0].os_id = 1; JSONArray jsArray = new JSONArray(o1); for (int i = 0; i < jsArray.length(); ++i) { JSONObject rec = jsArray.

我有一个多维数组,它有整数值和字符串值。我想将数组转换为json格式,并将其发送回ajax函数。我正在尝试打印要检查的数组内容,但无法执行此操作

Os[] o1 = new os[];
o1[0].os_name = "xyz";
o1[0].os_id = 1;
JSONArray jsArray = new JSONArray(o1);

for (int i = 0; i < jsArray.length(); ++i) {
    JSONObject rec = jsArray.getJSONObject(i);
    int id = rec.getInt("os_id");
    String loc = rec.getString("os_name");
    System.out.println(id+loc);
}
我得到一个错误:

找不到JSONObject[“os_id”]


首先,您需要初始化正在使用的数组和对象。 其次,您需要为Json API的Os对象属性提供评估器(getter)

您的主要问题是bean中缺少getter。要解决此问题,请如下更改操作系统类:

public class Os {

    int os_id;
    String os_name;

    public int getOs_id() {
        return os_id;
    }

    public String getOs_name() {
        return os_name;
    }

}
然后您更正的代码将是:

// In Java the Arrays must have a size
Os[] o1 = new Os[1];

/* The Array contains only null values by default. You must create 
   objects and assign them to the newly created Array. 
   ( In your example, only one object is created)  */

Os anOs = new  Os();
anOs.os_name = "xyz";
anOs.os_id = 1;

// Assign the object to the Array index 0
o1[0]=anOs;

JSONArray jsArray = new JSONArray(o1);

for (int i = 0; i < jsArray.length(); ++i) {
  JSONObject rec = jsArray.getJSONObject(i);
  int id = rec.getInt("os_id");
  String loc = rec.getString("os_name");
  System.out.println(id+loc);
}
//在Java中,数组必须有一个大小
Os[]o1=新Os[1];
/*默认情况下,数组仅包含空值。您必须创建
对象并将其指定给新创建的数组。
(在您的示例中,仅创建一个对象)*/
Os anOs=新Os();
anOs.os_name=“xyz”;
anOs.os_id=1;
//将对象分配给数组索引0
o1[0]=anOs;
JSONArray jsArray=新的JSONArray(o1);
对于(int i=0;i
假设您打算这么做

Os[] osArray = new Os[1];
Os os1 = new Os();
os1.os_id = 1;
os1.os_name = "xyz";
osArray[0] = os1;

JSONArray jsonArray = new JSONArray(osArray);
我正在尝试打印数组内容

你可以这样做

System.out.println(jsonArray.toString());
它将打印数组中的空JSON对象

[{}]
因此,您的错误是有意义的,因为您有一个没有键的空对象

要解决这个问题,请像这样更新您的类

public class Os {
    int os_id;
    String os_name;

    public int getOs_id() {
        return os_id;
    }

    public String getOs_name() {
        return os_name;
    }
}
现在你会看到

[{"os_id":1,"os_name":"xyz"}]

也许在创建数组时声明一个大小会有所帮助,比如:
Os[]o1=newos[1]您的第一行已断开。Os[]o1=新Os[];第二个“os”未引用对象,并且未使用大小声明数组。
o1[0]。os_name=“xyz”甚至不应该工作,因为1)您的数组没有大小。2)数组中没有对象请用新代码更新您的问题。将您的实际代码显示为一个数组,您实际上只需要getter就可以了work@cricket_007提供的示例功能不全,因此我更正了它。你是对的,主要的问题与Json API按预期工作所必需的getter/setter有关。我只是指不需要setter,只需要getter。您可以查看我的答案以供参考。您是对的@cricket_007,编组过程只需要getter。但是解编需要二传手来完成。。所以我总是把两者都加上。但只有在从java到json的转换是双向的情况下,才有必要这样做。
[{"os_id":1,"os_name":"xyz"}]