I have a method that exports every POJO person and create an array into a JSON:
Node temp = testa;
ObjectMapper mapper = new ObjectMapper();
FileWriter fileWriter = new FileWriter(Paths.get("jPerson.json").toFile(), true);
SequenceWriter seqWriter = mapper.writer().writeValuesAsArray(fileWriter);
while (temp != null) {
seqWriter.write(temp.getPersona());
temp = temp.getSuccessivo();
}
seqWriter.close();
I want to create a method that read every object of the array and print it on the screen. This is the prototype, but it prints the hashcode (Person@6a1aab78, etc.):
ObjectMapper mapper = new ObjectMapper();
try {
Persona[] pJson;
pJson = mapper.readValue(Paths.get("jPersona.json").toFile(), Persona[].class);
System.out.println(ReflectionToStringBuilder.toString(pJson));
} catch (IOException e) {
e.printStackTrace();
}
CodePudding user response:
If you want to print your POJO Persona
as JSON, you can use Jackson's ObjectMapper
to serialize to a JsonNode
and use JsonNode#toString()
:
final Persona persona = ...;
final JsonNode json = objectMapper.readValue(persona, JsonNode.class);
System.out.println(json);
If you want to print multiple Persona
objects, you can iterate:
for(final Persona persona : personas) {
final JsonNode json = objectMapper.readValue(persona, JsonNode.class);
System.out.println(json);
}
or, even better, serialize once and iterate:
final Persona[] personas = ...;
final JsonNode jsonArray = objectMapper.valueToTree(personas);
// Check may not be necessary.
if(json.isArray()) {
// JsonNode implements Iterable.
for(final JsonNode jsonNode : jsonArray) {
System.out.println(jsonNode);
}
}
CodePudding user response:
ReflectionToStringBuilder.toString(Object)
doesn't create a "deep" toString
method. In your case you could just call Arrays.toString(pJson)
and it would have the same result.
Easiest solution is to just override toString
in Persona
.
public class Persona {
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
System.out.println(Arrays.toString(pJson));
Or you use a Stream
to join all the values in the pJson
array to one String
.
System.out.println('[' Arrays.stream(pJson)
.map(ReflectionToStringBuilder::toString)
.collect(Collectors.joining(", ")) ']');