Java 使用GSON解析长JSON
我试图解析一个非常长的JSON,就像这样Java 使用GSON解析长JSON,java,json,gson,blast,Java,Json,Gson,Blast,我试图解析一个非常长的JSON,就像这样 { "BlastOutput2": [ { "report": { "program": "blastn", "version": "BLASTN 2.6.0+", "reference": "Stephen F. Altschul, Thomas L. Madden, Alejandro A. Schäffer, Jinghui Zhang, Zheng Zhan
{
"BlastOutput2": [
{
"report": {
"program": "blastn",
"version": "BLASTN 2.6.0+",
"reference": "Stephen F. Altschul, Thomas L. Madden, Alejandro A. Schäffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), \"Gapped BLAST and PSI-BLAST: a new generation of protein database search programs\", Nucleic Acids Res. 25:3389-3402.",
"search_target": {
"subjects": [
"Subject_1"
]
},
"params": {
"expect": 0.0001,
"sc_match": 1,
"sc_mismatch": -2,
"gap_open": 5,
"gap_extend": 2,
"filter": "F"
},
"results": {
"bl2seq": [
{
"query_id": "Query_1",
"query_title": "F1-125",
"query_len": 806,
"hits": [
{
"num": 1,
"description": [
{
"id": "gi|251831106|ref|NC_012920.1|",
"title": "gi|251831106|ref|NC_012920.1| Homo sapiens mitochondrion, complete genome"
}
],
"len": 16569,
"hsps": [
{
"num": 1,
"bit_score": 619.793,
"score": 322,
"evalue": 3.47859e-180,
"identity": 458,
"query_from": 57,
"query_to": 572,
"query_strand": "Plus",
"hit_from": 16060,
"hit_to": 16569,
"hit_strand": "Plus",
"align_len": 516,
"gaps": 6,
"qseq": "GTATTGACTCACCGCTTAACAACGGCAATGTATTTCGTACATTACTGCCAGCCACAAAGAAAGTTGTACAGTACCATAAATACTTGACTACCTGTAGTACATAAAAACTCAACCCACATCAAAACCCCAAAAGACGAGACAGAAAAGCAAGTTTTTCAATCAACCTTCAACTGTCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATATCAACAAACCTACCCGCCCTTAACAGTACATAGCACATAAAGTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTTTTTTTTGTGGTCCCCTGACCACCATCCTCCGTGTTTTTTTTTTTTCTCGCACAAGAGTGCTACTCTCCTCGTTCTGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGACATCTGGTTCCTACTTCAGGGTCATAAAGCCTAAATAGCCCACACGTTCCCCTTTTTATAAGACATCACGATG",
"hseq": "GTATTGACTCACCCATCAACAACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAATACTTGACCACCTGTAGTACATAAAAACCCAATCCACATCAAAACCCCCTCC--CCATGCTTACAAGCAAGTACAGCAATCAACCCTCAACTATCACACATCAACTGCAACTCCAAAGCCACCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAAGCCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCCCCTCAGATAGG-GGTCCCTTGACCACCATCCTCCGTG--AAATCAATATCCCGCACAAGAGTGCTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGACATCTGGTTCCTACTTCAGGGTCATAAAGCCTAAATAGCCCACACGTTCCCC-TTAAATAAGACATCACGATG",
"midline": "||||||||||||| | |||||| || |||||||||||||||||||||||||||| | ||| |||||| |||||||||||||||||| ||||||||||||||||||| ||| ||||||||||||||| | | | | |||||||| ||||||||| |||||| ||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||| ||||||||||||||||| |||||||| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| | | |||||| |||||||||||||||||| | | || |||||||||||||||||||||||| || ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| || ||||||||||||||||"
},
{
"num": 2,
"bit_score": 108.358,
"score": 56,
"evalue": 3.15269e-026,
"identity": 88,
"query_from": 573,
"query_to": 666,
"query_strand": "Plus",
"hit_from": 1,
"hit_to": 89,
"hit_strand": "Plus",
"align_len": 94,
"gaps": 5,
"qseq": "GATCACAGGTCTATCACCCTATTAAACCACTCACGGGGAGCTCTCCATGCATTTGGTATTTTTCGTCTGGGGGGGGTATGCACGCGATAACATT",
"hseq": "GATCACAGGTCTATCACCCTATTAA-CCACTCACGGG-AGCTCTCCATGCATTTGGTA-TTTTCGTCT--GGGGGGTATGCACGCGATAGCATT",
"midline": "||||||||||||||||||||||||| ||||||||||| |||||||||||||||||||| ||||||||| ||||||||||||||||||| ||||"
}
]
}
],
"stat": {
"hsp_len": 14,
"eff_space": 13111560,
"kappa": 0.620991117264206,
"lambda": 1.33270576282382,
"entropy": 1.12409184650114
}
}
]
}
}
}
]
}
我正在使用GSON,通过查看一些示例,一些人使用Class将所有内容定义到JSON文件中,但我不知道这是否是处理这个特殊情况的最佳方法,因为我只想从这个JSON中获得结果部分,有人能帮我吗 您不需要创建一堆类来解析复杂的JSON字符串。让我们将其解析为一个
HashMap
,然后遍历它以获得所需的内容
Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
HashMap<String, Object> myMap = gson.fromJson("your_json_string", type);
这有用吗?为此,您最好使用带有GSON的更简单的库。虽然可以使用GSON进行特殊解析,但这并不是它的主要用途;但是我总是收到一个错误,或者是预期的BEGIN\u数组或BEGIN\u对象,所以我有点笨。我已经编辑了代码,将HashMap更改为HashMap。对于此HashMap,您可以成功解析JSON,要遍历映射,您需要检查任何元素的类型(instanceof HashMap、instanceof List或instanceof String)。对于(map.Entry outer:map.entrySet()){if(outer.getValue()instanceof List){List lista=(List)outer.getValue();For(Object String:lista){//if(string instanceof List){System.out.println(string);//}}}是否正确?如何获得结果部分?您能帮助我吗?
public static void main(String[] args) throws ParseException, JsonSyntaxException, IOException {
Type type = new TypeToken<HashMap<String, Object>>() {
}.getType();
Gson gson = new Gson();
HashMap<String, Object> map = gson.fromJson("your_json_string", type);
for (String key : map.keySet()) {
Object obj = map.get(key);
if (obj instanceof List) {
for (Object o : (List) obj) {
if (o instanceof Map) {
loop((Map) o);
} else {
System.out.println(key + " : " + o);
}
}
} else if (obj instanceof Map) {
loop((Map) obj);
} else {
System.out.println(key + " : " + obj);
}
}
}
private static void loop(Map<String, Object> map) {
for (String key : map.keySet()) {
Object obj = map.get(key);
if (obj instanceof List) {
for (Object o : (List) obj) {
if (o instanceof Map) {
loop((Map) o);
} else {
System.out.println(key + " : " + o);
}
}
} else if (obj instanceof Map) {
loop((Map) obj);
} else {
System.out.println(key + " : " + obj);
}
}
}