在我的Android应用程序中,String类型的变量enderecos从我的Datasnap Server接收一个json数组:
[
"{\"type\":\"ClassesProjeto.TEndereco\",\"id\":1,\"fields\":{\"FIdentificador_Endereco\":1,\"FRua\":\"Test\",\"FNumero\":\"1\",\"FCidade\":\"Test\",\"FBairro\":\"Test\",\"FEstado\":\"Test\",\"FVersao_Dispositivo\":1}}",
"{\"type\":\"ClassesProjeto.TEndereco\",\"id\":1,\"fields\":{\"FIdentificador_Endereco\":2,\"FRua\":\"Test2\",\"FNumero\":\"1\",\"FCidade\":\"Test2\",\"FBairro\":\"Test2\",\"FEstado\":\"Test2\",\"FVersao_Dispositivo\":1}}"
]
我使用以下代码从此数组中获取每个对象的JSON值:
enderecos = dsProxy.getEnderecos();
ObjectMapper objectMapper = new ObjectMapper();
JsonNode node = objectMapper.readTree(enderecos);
for (JsonNode node_object : node){
JsonNode object = node_object.get("fields");
}
但是JsonNode的变量节点总是接收null,为什么?并且属性字段存在于每个Json对象中。
答案 0 :(得分:1)
在正确格式化JSON之后我们都可以看到,有一个包含 2个字符串值元素的JSON数组。
[
"{\"type\":\"ClassesProjeto.TEndereco\",\"id\":1,\"fields\":{\"FIdentificador_Endereco\":1,\"FRua\":\"Test\",\"FNumero\":\"1\",\"FCidade\":\"Test\",\"FBairro\":\"Test\",\"FEstado\":\"Test\",\"FVersao_Dispositivo\":1}}",
"{\"type\":\"ClassesProjeto.TEndereco\",\"id\":1,\"fields\":{\"FIdentificador_Endereco\":2,\"FRua\":\"Test2\",\"FNumero\":\"1\",\"FCidade\":\"Test2\",\"FBairro\":\"Test2\",\"FEstado\":\"Test2\",\"FVersao_Dispositivo\":1}}"
]
这些元素表示每个JSON字符串,必须对其进行解析以获取JSON对象。
第一个元素RAW
"{\"type\":\"ClassesProjeto.TEndereco\",\"id\":1,\"fields\":{\"FIdentificador_Endereco\":1,\"FRua\":\"Test\",\"FNumero\":\"1\",\"FCidade\":\"Test\",\"FBairro\":\"Test\",\"FEstado\":\"Test\",\"FVersao_Dispositivo\":1}}"
第一个元素为JSON
{
"type":"ClassesProjeto.TEndereco",
"id":1,
"fields":{
"FIdentificador_Endereco":1,
"FRua":"Test",
"FNumero":"1",
"FCidade":"Test",
"FBairro":"Test",
"FEstado":"Test",
"FVersao_Dispositivo":1
}
}
要像在代码中那样访问值,返回的JSON应该是这样的
[
{
"type":"ClassesProjeto.TEndereco",
"id":1,
"fields":{
"FIdentificador_Endereco":1,
"FRua":"Test",
"FNumero":"1",
"FCidade":"Test",
"FBairro":"Test",
"FEstado":"Test",
"FVersao_Dispositivo":1
}
},
{
"type":"ClassesProjeto.TEndereco",
"id":1,
"fields":{
"FIdentificador_Endereco":2,
"FRua":"Test2",
"FNumero":"1",
"FCidade":"Test2",
"FBairro":"Test2",
"FEstado":"Test2",
"FVersao_Dispositivo":1
}
}
]