字符串数组的Java JSON数组格式化问题

字符串数组的Java JSON数组格式化问题,java,arrays,json,Java,Arrays,Json,正如标题所示,我对字符串数组(列表)的JSON格式有一个问题 基本上,这是我希望看到的格式: {"Item": ["Id: 1","Title: Surface Pro 4","Phone: 4077603835","Email: XXXXXXXX@gmail.com","Description: Surface Pro 4 for sale, in excellent condition, basically brand new!"], "Item":

正如标题所示,我对字符串数组(列表)的JSON格式有一个问题

基本上,这是我希望看到的格式:

{"Item":
    ["Id: 1","Title: Surface Pro 4","Phone: 4077603835","Email:  
    XXXXXXXX@gmail.com","Description: Surface Pro 4 for sale, in  
    excellent condition, basically brand new!"],

"Item":
    "Id: 2","Title: Macbook Air","Phone: null","Email:  
     null","Description: null"],
"Item": 
    "Id: 3","Title: Lenovo Laptop","Phone: 3433215565","Email: 
     XXXXXXXX.com","Description: Free Macbook Air, I promise"]
}
但是,这是我的代码生成的以下格式:

{"Item":["Id: 1","Title: Surface Pro 4","Phone: 4077603835","Email:   
XXXXXXXX@gmail.com","Description: Surface Pro 4 for sale, in  
excellent condition, basically brand new!","Id: 2","Title: Macbook 
Air","Phone: null","Email: null","Description: null","Id: 3","Title: 
Lenovo Laptop","Phone: 3433215565","Email: 
XXXXXXXX.com","Description: Free Macbook Air, I promise"]}
我只想看到每个项目的单独数组!我认为问题在于这部分代码:“obj.put(“Item”,items);”因为它将所有项放在同一个数组中,但如何动态创建不同的数组?我的项目列表将不断扩展,而且永远不会保持不变

代码:

public List SelectAllSQL(){
列表结果=新建ArrayList();
sql=“从项目中选择*”;
试一试{
结果集rs=stmt.executeQuery(sql);
rs.last();
int lastRow=rs.getRow();

对于(int row=1;row,我认为这一行代码产生的问题是正确的。您可以想到包含键和值对的JSON对象。在您的例子中,它的“Item”是键,数组是值。您可以通过JSON对象的键访问它们的值,因此不能使用相同键的键和值对


解决方案:使您的密钥不同。“Item1”、“Item2”、“Item3”。同时将JSONArray items=new JSONArray();在您的范围内,如David所说,我认为您的代码行创建问题是正确的。您可以认为JSON对象包含密钥和值对。在您的情况下,它的“Item”是键,数组是值。您可以通过JSON对象的键访问它们的值,因此不能使用相同的键对键和值对

解决方案:使您的键不同。“Item1”、“Item2”、“Item3”。还可以将JSONArray items=new JSONArray();放在您的范围内,就像David所说的那样

两件事:

  • 为循环中的每个项重新初始化JSONArray,以便sqlResult的每一行都有自己的属性数组。现有代码初始化它一次,这就是当前输出中的数组如何使用来自其中所有三个项的数据结束的

    for(String[] arr : sqlResult) {
        JSONArray items = new JSONArray();
    
  • JSONObject不允许使用同一个键的多个条目。JSONObject不允许有三个条目,所有条目的值都是“Item”。当
    obj.put(“Item”,items);
    第二次和第三次被调用时,它将替换“Item”的前一个值在许多可能的解决方案中,有两种都需要更改所需的输出

    • 为每个记录选择一个唯一的键,例如id
    • 创建另一个包含3+项的JSONArray,而不是将其作为关联JSONObject
  • 两件事:

  • 为循环中的每个项重新初始化JSONArray,以便sqlResult的每一行都有自己的属性数组。现有代码初始化它一次,这就是当前输出中的数组如何使用来自其中所有三个项的数据结束的

    for(String[] arr : sqlResult) {
        JSONArray items = new JSONArray();
    
  • JSONObject不允许使用同一个键的多个条目。JSONObject不允许有三个条目,所有条目的值都是“Item”。当
    obj.put(“Item”,items);
    第二次和第三次被调用时,它将替换“Item”的前一个值在许多可能的解决方案中,有两种都需要更改所需的输出

    • 为每个记录选择一个唯一的键,例如id
    • 创建另一个包含3+项的JSONArray,而不是将其作为关联JSONObject
  • 将它保留在for循环中,因为它将重新创建JSONArray,否则它将添加到与elmenets相同的数组中,所以将它保留在循环中


    将其保留在for循环中,因为它将重新创建JSONArray,否则它将添加到与elmenets相同的数组中,因此将其保留在循环中
    进入
    for
    循环的范围。在您的情况下,您对所有不同的项使用相同的
    项。Place
    JSONArray items=new JSONArray();
    进入
    循环的
    范围。在您的情况下,所有不同的项目都使用相同的
    项目。非常感谢,这解决了我的问题!!非常感谢,这解决了我的问题!!
    
    JSONArray items = new JSONArray();