Java中的嵌套JSON数组

时间:2017-01-15 08:12:13

标签: java arrays json

我需要创建一个类似下面的json响应。我尝试了一些代码,但无法得到我需要的东西。在java代码中需要帮助来创建嵌套数组,以根据类别以及类别详细信息对食品进行分组,如下面的json

{
"menu": {
"items": [{
        "id": 1,
        "code": "hot1_sub1_mnu",
        "name": "Mutton",
        "status": "1",
        "sub_items": [{
            "id": "01",
            "name": "Mutton Pepper Fry",
            "price": "100"
        }, {
            "id": "02",
            "name": "Mutton Curry",
            "price": "100"
        }]
    },
    {
        "id": "2",
        "code": "hot1_sub2_mnu",
        "name": "Sea Food",
        "status": "1",
        "sub_items": [{
            "id": "01",
            "name": "Fish Fry",
            "price": "150"
        }]
    },
    {
        "id": "3",
        "code": "hot1_sub3_mnu",
        "name": "Noodles",
        "status": "1",
        "sub_items": [{
            "id": "01",
            "name": "Chicken Noodles",
            "price": "70"
        }, {
            "id": "02",
            "name": "Egg Noodles",
            "price": "60"
        }]
    }
]
}
}

到目前为止我尝试过的只会在一个阵列中给出响应。

@Path("/items")
public class HotelsMenu {
@GET
@Path("/getitems")
@Produces(MediaType.APPLICATION_JSON)
public String doLogin(@QueryParam("hotelcode") String hotelcode) {

JSONObject response = new JSONObject();
JSONArray hotelDetails = checkCredentials(hotelcode);
try {
    response.put("hotels", hotelDetails);
    response.put("status", (hotelDetails == new JSONArray()) ? "false" : "true");
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
return response.toString();
}

private JSONArray checkCredentials(String hotelcode) {
System.out.println("Inside checkCredentials");

JSONArray result = new JSONArray();

    try {
        result = DBConnection.checkItems(hotelcode);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

return result;
}

public static JSONArray checkItems(String hotelcode) throws Exception {
int id;
String code = hotelcode + "_mnu";
String name = null;
String name1 = null;
String status;
String price;

Connection dbConn = null;
Connection dbConn1 = null;
JSONArray hotels = new JSONArray();
JSONArray menu = new JSONArray();
try {
    try {
        dbConn = DBConnection.createConnection();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Statement stmt = dbConn.createStatement();
    String query = "SELECT * FROM " + code + " where Status='1'";
    System.out.println(query);
    ResultSet rs1 = stmt.executeQuery(query);
    System.out.println("hai");

    while (rs1.next()) {

        JSONObject hotel = new JSONObject();
        id = rs1.getInt("Id");
        hotel.put("id", id);
        code = rs1.getString("Code");
        System.out.println(code);
        hotel.put("code", code);
        name = rs1.getString("Name");
        hotel.put("name", name);
        status = rs1.getString("Status");
        hotel.put("status", status);
        hotels.put(hotel);
        System.out.println("Hotel1:" + hotels);
        try {
            dbConn1 = DBConnection.createConnection();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Statement stmt1 = dbConn1.createStatement();
        String query1 = "SELECT * FROM " + code + "  where Status='1' ";
        System.out.println(query1);
        ResultSet rs2 = stmt1.executeQuery(query1);

        while (rs2.next()) {

            JSONArray hotel1 = new JSONArray();
            JSONObject hotelmenu = new JSONObject();
            id = rs2.getInt("Id");
            hotelmenu.put("id", id);
            name1 = rs2.getString("Name");
            hotelmenu.put("name", name1);
            price = rs2.getString("Price");
            hotelmenu.put("price", price);
            hotel1.put(hotelmenu);

            hotels.put(hotel1);

            System.out.println(hotels);
        }

    }
} catch (SQLException sqle) {
    throw sqle;
} catch (Exception e) {
    // TODO Auto-generated catch block
    if (dbConn != null) {
        dbConn.close();
    }
    throw e;
} finally {
    if (dbConn != null) {
        dbConn.close();
    }
}
return hotels;
}
}

2 个答案:

答案 0 :(得分:0)

如前所述,您应该重新设计模型。我刚刚对它进行了快速重组。检查这是否符合您的目的 -

{
"menu": {
    "items": [{
            "id": 1,
            "code": "hot1_sub1_mnu",
            "name": "Mutton",
            "status": "1",
            "sub_items": [{
                "id": "01",
                "name": "Mutton Pepper Fry",
                "price": "100"
            }, {
                "id": "02",
                "name": "Mutton Curry",
                "price": "100"
            }]
        },
        {
            "id": "2",
            "code": "hot1_sub2_mnu",
            "name": "Sea Food",
            "status": "1",
            "sub_items": [{
                "id": "01",
                "name": "Fish Fry",
                "price": "150"
            }]
        },
        {
            "id": "3",
            "code": "hot1_sub3_mnu",
            "name": "Noodles",
            "status": "1",
            "sub_items": [{
                "id": "01",
                "name": "Chicken Noodles",
                "price": "70"
            }, {
                "id": "02",
                "name": "Egg Noodles",
                "price": "60"
            }]
        }
    ]
}}

如果结构正常,请知道您是否需要Java代码的帮助来生成上面的Json。

也许可以浏览以下图书馆 - Jackson tutorialGson tutorial

答案 1 :(得分:0)

//导入java.util.ArrayList; //导入org.bson.Document;

SELECT DISTINCT Id, VehicleName + '#' + ISNULL(RegisNo, '') AS 'Model'
FROM            Inventory
WHERE SupplierName = 'John'
AND
RegisNo NOT IN (
SELECT RegisNo FROM EngagedInventoryLog
WHERE
CONVERT(DATETIME,'15/09/2019 10:00:00',103) <  DropDate
    AND convert(DATETIME,'16/09/2019 16:00:00',103) > PickupDate