【问题标题】:How to maintain the order of keys while parsing JSON in groovy如何在groovy中解析JSON时保持键的顺序
【发布时间】:2015-07-25 15:20:02
【问题描述】:

我正在尝试解析一个包含很多键的大型 JSON 文件,然后在对 10-12 个键进行更改后,我将修改后的内容写回一个新的文本文件。

我面临的问题是键的顺序发生了变化,我有必要保持键的顺序。

我正在使用下面的代码来这样做

import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

def inputFile = new File("C:\\input\\input.json")

def InputJSON = new JsonSlurper().parseText(inputFile.text)
...
InputJSON.key1 = 'a'
InputJSON.key2 = 'b'
...
new File("C:\\output\\output.txt").write(new JsonBuilder(InputJSON).toPrettyString())

请帮我把解析后修改的内容写回新的文本文件。

【问题讨论】:

  • 如果任何语言的任何代码依赖于 JSON 对象的键的顺序,那么该代码应该是固定的,因为对象的键不应该具有任何特定的顺序。所以,简而言之,你不应该关心键的顺序。
  • @JBNizet 我遇到了同样的建议,但在我的情况下,我需要将输入 json 文件复制到 10-14 个不同的文本文件中,并在每个文件中更改一些具有不同值的键,以便一个可以很容易地观察到变化。它与QA过程自动化相关的代码无关。
  • 您需要将其解析为 JSON 还是可以使用字符串操作并直接进行更改?不确定toPrettyString() 是否会导致问题。你可以试试toString()吗?
  • 对于qa,他们不能将json加载到hashmap中(也没有顺序)并比较地图吗?

标签: java json parsing groovy


【解决方案1】:

假设您有一个使用 groovy 转换为 json 的对象字段

你通常会这样做

new JsonBuilder(obj).toString()

现在如果你想确保 json 中键的顺序是 field2,field3,field4,field1 那么你可以这样做

def listOfFields = [
   "field2",
    "field3",
    "field4",
    "field1"
]

Map map = new LinkedHashMap();

listOfFields.each{  
    map[it] = obj."${it}"
}

new JsonBuilder(obj).toString()

这将确保你的 json 有

{   
    "field2": "val2",
    "field3": "val3",
    "field4": "val4",
    "field1": "val1"

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2023-03-30
    相关资源
    最近更新 更多