如何在 Kotlin 中使用 mapOf() 为 JSON 文件插入新行?

How to insert a new line by using mapOf() for JSON file in Kotlin?

提问人:Tommy 提问时间:11/15/2023 最后编辑:k314159Tommy 更新时间:11/15/2023 访问量:62

问:

我计划在 Kotlin 中创建以下 JSON 文件:

{"Basket A": {"Row 1":"Apple", "Row 2":"Orange", "Row 3":"Pear", "Row 4":"Grapes"}}
{"Basket B": {"Row 1":"Mango", "Row 2":"Pineapple", "Row 3":"Kiwi", "Row 4":"Cherry"}}
{"Basket C": {"Row 1":"Banana", "Row 2":"Papaya", "Row 3":"Watermelon", "Row 4":"Strawberry"}}
{"Basket D": {"Row 1":"Avocado", "Row 2":"Peach", "Row 3":"Lemon", "Row 4":"Guava"}}

目前我正在使用以下代码:

val rows = mapOf(
"Row 1" to "Apple",
"Row 2":"Orange",
"Row 3":"Pear",
"Row 4":"Grapes"
)

val basketA = mapOf(
"Basket A" to rows
)

然后,我可以使用 Gson() 函数将其转换为 JSON,如下所示:

val gson = Gson()
val geoJsonString = gson.toJson(basketA)

如果 JSON 文件中只有 1 个篮子或 1 行,则一切都很好,但是篮子 B、C 和 D 呢?如何在JSON文件中插入新行?

Android JSON Kotlin

评论

1赞 k314159 11/15/2023
您在此处显示的文件不是有效的 JSON,但它实际上是一种不同的格式,称为 NDJSON。

答:

1赞 Ivan Wooll 11/15/2023 #1

这不是有效的 json

   {"Basket A": {"Row 1":"Apple", "Row 2":"Orange", "Row 3":"Pear", "Row 4":"Grapes"}}
   {"Basket B": {"Row 1":"Mango", "Row 2":"Pineapple", "Row 3":"Kiwi", "Row 4":"Cherry"}}
   {"Basket C": {"Row 1":"Banana", "Row 2":"Papaya", "Row 3":"Watermelon", "Row 4":"Strawberry"}}
   {"Basket D": {"Row 1":"Avocado", "Row 2":"Peach", "Row 3":"Lemon", "Row 4":"Guava"}}

如果要将这些对象包含在 json 对象中,则需要像这样位于数组中

{
  "baskets": [
    {
      "Basket A": {
        "Row 1": "Apple",
        "Row 2": "Orange",
        "Row 3": "Pear",
        "Row 4": "Grapes"
      }
    },
    {
      "Basket B": {
        "Row 1": "Mango",
        "Row 2": "Pineapple",
        "Row 3": "Kiwi",
        "Row 4": "Cherry"
      }
    },
    {
      "Basket C": {
        "Row 1": "Banana",
        "Row 2": "Papaya",
        "Row 3": "Watermelon",
        "Row 4": "Strawberry"
      }
    },
    {
      "Basket D": {
        "Row 1": "Avocado",
        "Row 2": "Peach",
        "Row 3": "Lemon",
        "Row 4": "Guava"
      }
    }
  ]
}

这里需要注意的重要事项是,各个行在一对带有键的方括号内用逗号分隔,所有内容都包裹在一对外大括号内。[]baskets{}

调整代码以产生上述结果应该不会太难

2赞 mandy8055 11/15/2023 #2

如其中一个答案中所述,您期望的 json 格式不正确。要使用多个篮子创建所需且正确的 JSON 结构,您可以为每个篮子创建一个,然后将它们组合成一个 .像这样:MapMap

fun main() {
  val basketA =
      mapOf(
          "Basket A" to
              mapOf("Row 1" to "Apple", "Row 2" to "Orange", "Row 3" to "Pear", "Row 4" to "Grapes")
      )

  // Similarly for other baskets...

  val allBaskets = listOf(basketA, basketB, basketC, basketD)

  val gson = Gson()
  val jsonString = gson.toJson(allBaskets)
  val outputFile = File("output.json")
  outputFile.writeText(jsonString)