2016-11-11 106 views
-3

我有以下JSON这种格式:解析JSON到对象的Java/Groovy的

[ 
    ["Rio Branco", "1200401", "MU", "01392", "Acre", "AC", 
     ["PSB", "Marina Silva", 115594, 58.34, "N"], 
     ["PSDB", "A\u00e9cio Neves", 44676, 22.55, "N"], 
     ["PT", "Dilma", 35802, 18.07, "N"], 
     ["PSOL", "Luciana Genro", 648, 0.33, "N"], 
     ["PSC", "Pastor Everaldo", 520, 0.26, "N"], 
     ["PV", "Eduardo Jorge", 346, 0.17, "N"], 
     ["PRTB", "Levy Fidelix", 332, 0.17, "N"], 
     ["PSDC", "Eymael", 155, 0.08, "N"], 
     ["PSTU", "Z\u00e9 Maria", 39, 0.02, "N"], 
     ["PCB", "Mauro Iasi", 25, 0.01, "N"], 
     ["PCO", "Rui Costa Pimenta", 6, 0.0, "N"] 
    ] 
] 

如何可以解析此JSON无需钥匙的名字呢? Java代码或groovy/grails代码。

我做到这一点...

def lista = new JsonSlurper().parseText(new File(jsonfilename).text) 
lista.each { 
      //here I want to read the properties of son, but how can I without the key name?? 
    } 
+1

这个JSON文档结构是恶梦的东西。 – rmlan

+0

任何线索?@rmlan –

+0

当然。做一些研究,写一些代码,并在有特定问题时回来。本网站不是用于转储JSON文档,并要求我们为您编写解析器。 – rmlan

回答

-1

您需要通过索引引用的每个字段。我建议将每个字段分配给一个地图,这将使它更容易使用:

json =''' [ 
    ["Rio Branco", "1200401", "MU", "01392", "Acre", "AC", 
     ["PSB", "Marina Silva", 115594, 58.34, "N"], 
     ["PSDB", "A\u00e9cio Neves", 44676, 22.55, "N"], 
     ["PT", "Dilma", 35802, 18.07, "N"], 
     ["PSOL", "Luciana Genro", 648, 0.33, "N"], 
     ["PSC", "Pastor Everaldo", 520, 0.26, "N"], 
     ["PV", "Eduardo Jorge", 346, 0.17, "N"], 
     ["PRTB", "Levy Fidelix", 332, 0.17, "N"], 
     ["PSDC", "Eymael", 155, 0.08, "N"], 
     ["PSTU", "Z\u00e9 Maria", 39, 0.02, "N"], 
     ["PCB", "Mauro Iasi", 25, 0.01, "N"], 
     ["PCO", "Rui Costa Pimenta", 6, 0.0, "N"] 
    ] 
]''' 

def result = new groovy.json.JsonSlurper().parseText json collect { uf -> 
    [ 
     capital : uf[0], 
     state: uf[4], 
     candidates : uf[6..-1].collect { candidate -> 
      [ 
       party : candidate[0], 
       name : candidate[1] 
      ] 
     } 
    ] 
} 

assert result[0].capital == "Rio Branco" 
assert result[0].state == "Acre" 
assert result[0].candidates[0].name == "Marina Silva" 
assert result[0].candidates[4].party == "PSC"