Arrays 如何解析包含嵌套JSON数组的JSON响应

Arrays 如何解析包含嵌套JSON数组的JSON响应,arrays,json,kotlin,Arrays,Json,Kotlin,我试图解析来自API的JSON响应,将数据存储到数据类,并将数据作为ArrayList发送到recycler适配器 JSON数组中有另一个对象数组,我无法找到正确解析JSON响应的方法 这是我的数据类: data class OrderDetails ( val orderId: String, // order_id value from json object goes here // val restaurantName: String, // restaurant_name value

我试图解析来自API的JSON响应,将数据存储到数据类,并将数据作为ArrayList发送到recycler适配器

JSON数组中有另一个对象数组,我无法找到正确解析JSON响应的方法

这是我的数据类:

data class OrderDetails (
val orderId: String, // order_id value from json object goes here //
val restaurantName: String, // restaurant_name value from json object goes here //
val totalCost: String, // total_cost value from json object goes here //
val orderDate: String, // order_placed_at value from json object goes here //
val orderFoodDetails: String // food_items value in json response is an array and i'm stuck here //
)
try {
val data = it.getJSONObject("data")
val success = data.getBoolean("success")

if (success) {
val arrayData = data.getJSONArray("data")
for (i in 0 until arrayData.length()) {
val orderJsonObject = arrayData.getJSONObject(i)
val orderObject = OrderDetails(
orderJsonObject.getString("order_id"),
orderJsonObject.getString("restaurant_name"),
orderJsonObject.getString("total_cost"),
orderJsonObject.getString("order_placed_at"),
orderJsonObject.getJSONArray("food_items").toString() // getting array and storing as a string
)
orderList.add(orderObject)

for (orders in orderList) {
val foodData = orders.orderFoodDetails
val jsonFood = JSONArray(foodData)
for (j in 0 until jsonFood.length()) {
val foodJsonObject = jsonFood.getJSONObject(j)
val foodObject = OrderFoodDetails(
foodJsonObject.getString("food_item_id"),
foodJsonObject.getString("name"),
foodJsonObject.getString("cost")
)
ordersFood.add(foodObject)
}
}
}
{
"data": {
"success": true,
"data": [
            {
"order_id": "17790",
"restaurant_name": "Rotten Tomatoes",
"total_cost": "280",
"order_placed_at": "02-11-20 19:00:54",
"food_items": [
                    {
"food_item_id": "156",
"name": "Rotten Bhajiya",
"cost": "100"
                    },
                    {
"food_item_id": "155",
"name": "Rotten Salad",
"cost": "100"
                    },
                    {
"food_item_id": "154",
"name": "Rotten Soup",
"cost": "80"
                    }
                ]
            },

这是我的Kotlin代码:

data class OrderDetails (
val orderId: String, // order_id value from json object goes here //
val restaurantName: String, // restaurant_name value from json object goes here //
val totalCost: String, // total_cost value from json object goes here //
val orderDate: String, // order_placed_at value from json object goes here //
val orderFoodDetails: String // food_items value in json response is an array and i'm stuck here //
)
try {
val data = it.getJSONObject("data")
val success = data.getBoolean("success")

if (success) {
val arrayData = data.getJSONArray("data")
for (i in 0 until arrayData.length()) {
val orderJsonObject = arrayData.getJSONObject(i)
val orderObject = OrderDetails(
orderJsonObject.getString("order_id"),
orderJsonObject.getString("restaurant_name"),
orderJsonObject.getString("total_cost"),
orderJsonObject.getString("order_placed_at"),
orderJsonObject.getJSONArray("food_items").toString() // getting array and storing as a string
)
orderList.add(orderObject)

for (orders in orderList) {
val foodData = orders.orderFoodDetails
val jsonFood = JSONArray(foodData)
for (j in 0 until jsonFood.length()) {
val foodJsonObject = jsonFood.getJSONObject(j)
val foodObject = OrderFoodDetails(
foodJsonObject.getString("food_item_id"),
foodJsonObject.getString("name"),
foodJsonObject.getString("cost")
)
ordersFood.add(foodObject)
}
}
}
{
"data": {
"success": true,
"data": [
            {
"order_id": "17790",
"restaurant_name": "Rotten Tomatoes",
"total_cost": "280",
"order_placed_at": "02-11-20 19:00:54",
"food_items": [
                    {
"food_item_id": "156",
"name": "Rotten Bhajiya",
"cost": "100"
                    },
                    {
"food_item_id": "155",
"name": "Rotten Salad",
"cost": "100"
                    },
                    {
"food_item_id": "154",
"name": "Rotten Soup",
"cost": "80"
                    }
                ]
            },

以下是Json响应:

data class OrderDetails (
val orderId: String, // order_id value from json object goes here //
val restaurantName: String, // restaurant_name value from json object goes here //
val totalCost: String, // total_cost value from json object goes here //
val orderDate: String, // order_placed_at value from json object goes here //
val orderFoodDetails: String // food_items value in json response is an array and i'm stuck here //
)
try {
val data = it.getJSONObject("data")
val success = data.getBoolean("success")

if (success) {
val arrayData = data.getJSONArray("data")
for (i in 0 until arrayData.length()) {
val orderJsonObject = arrayData.getJSONObject(i)
val orderObject = OrderDetails(
orderJsonObject.getString("order_id"),
orderJsonObject.getString("restaurant_name"),
orderJsonObject.getString("total_cost"),
orderJsonObject.getString("order_placed_at"),
orderJsonObject.getJSONArray("food_items").toString() // getting array and storing as a string
)
orderList.add(orderObject)

for (orders in orderList) {
val foodData = orders.orderFoodDetails
val jsonFood = JSONArray(foodData)
for (j in 0 until jsonFood.length()) {
val foodJsonObject = jsonFood.getJSONObject(j)
val foodObject = OrderFoodDetails(
foodJsonObject.getString("food_item_id"),
foodJsonObject.getString("name"),
foodJsonObject.getString("cost")
)
ordersFood.add(foodObject)
}
}
}
{
"data": {
"success": true,
"data": [
            {
"order_id": "17790",
"restaurant_name": "Rotten Tomatoes",
"total_cost": "280",
"order_placed_at": "02-11-20 19:00:54",
"food_items": [
                    {
"food_item_id": "156",
"name": "Rotten Bhajiya",
"cost": "100"
                    },
                    {
"food_item_id": "155",
"name": "Rotten Salad",
"cost": "100"
                    },
                    {
"food_item_id": "154",
"name": "Rotten Soup",
"cost": "80"
                    }
                ]
            },

所需输出

我的输出

您是否尝试使用GSON或Moshy lib? 使用以下选项之一,此案例将更容易解决:)

如果您不想使用其中一个,只需尝试将for循环替换为map或for each,以使其更具可读性。看起来你做对了,但是你能检查一下try catch block的结果吗