我正在阅读一个简单的JSON...。
{"A":0,"B":0,"C":2,"D":0,"F":5}
Run Code Online (Sandbox Code Playgroud)
在Groovy中使用JsonSlurper进入地图...
Map gradeDistributon = jsonSlurper.parseText(jsonString)
Run Code Online (Sandbox Code Playgroud)
但是当使用闭包遍历此地图时。
gradeDistributon.each{ entry ->
println "From map got key ${entry.key}"
Run Code Online (Sandbox Code Playgroud)
我看到密钥的顺序不是原始JSON中的顺序,例如“ C”排在最前面。我认为这是因为Map不维护Java中的插入顺序。有没有办法保持原始JSON的顺序?
如果这意味着以其他方式(而不是使用JsonSlurper映射到JSON)读取JSON,那么如果您可以向我展示如何使用它,那我很好。
我无法使用 groovy 2.4.5 重现您的行为,但您可以尝试使用 LinkedHashMap (允许迭代映射键以保持条目插入的顺序):
import groovy.json.*
def jsonText = '''
{"A":0,"B":0,"C":2,"D":0,"F":5,"G":7,"H":9}
'''
LinkedHashMap json = new JsonSlurper().parseText(jsonText)
json.each{ entry ->
println "${entry.key}"
}
Run Code Online (Sandbox Code Playgroud)
注意:正如@XenoN所述,JsonSlurper()在解析过程中对json键进行排序,因此与输入顺序无关(即{"H":0,"B":0,"A":2,"D":0,"G":5,"F":7,"C":9}),JsonSlurper的输出将始终是:{"A":2,"B":0,"C":9,"D":0,"F":7,"G":5,"H":0}。
使用LinkedHashMap而不是 HashMap,我们保留 JsonSlurper 给出的顺序。
| 归档时间: |
|
| 查看次数: |
3551 次 |
| 最近记录: |