How can I create a json array like the example below using jackson.
I tried using ObjectMapper, but this does not seem correct.
try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) { for (Path file : ds) { System.out.println("name:"+file.getFileName()+ "\n"+ "mime:"+Files.probeContentType(file)+ "\n"+ "locked:"+!Files.isWritable(file)); } } catch (IOException e) { System.err.println(e); }
Eventually I will be making a json that has the below values.
* - (int) size file size in b. required * - (int) ts file modification time in unix time. required * - (string) mime mimetype. required for folders, others - optionally * - (bool) read read permissions. required * - (bool) write write permissions. required * - (bool) locked is object locked. optionally * - (bool) hidden is object hidden. optionally * - (string) alias for symlinks - link target path relative to root path. optionally * - (string) target for symlinks - link target path. optionally
Here is an example json I was provided.
"files": [ { "mime": "directory", "ts": 1334071677, "read": 1, "write": 0, "size": 0, "hash": "l1_Lw", "volumeid": "l1_", "name": "Demo", "locked": 1, "dirs": 1 }, { "mime": "directory", "ts": 1334071677, "read": 1, "write": 0, "size": 0, "hash": "l1_Lw", "volumeid": "l1_", "name": "Demo", "locked": 1, "dirs": 1 }, { "mime": "directory", "ts": 1340114567, "read": 0, "write": 0, "size": 0, "hash": "l1_QmFja3Vw", "name": "Backup", "phash": "l1_Lw", "locked": 1 }, { "mime": "directory", "ts": 1310252178, "read": 1, "write": 0, "size": 0, "hash": "l1_SW1hZ2Vz", "name": "Images", "phash": "l1_Lw", "locked": 1 }, { "mime": "application\/x-genesis-rom", "ts": 1310347586, "read": 1, "write": 0, "size": 3683, "hash": "l1_UkVBRE1FLm1k", "name": "README.md", "phash": "l1_Lw", "locked": 1 } ]
EDIT 1
Map<String, Object> filesMap = new HashMap<>(); List<Object> files = new ArrayList<Object>(); System.out.println("\nNo filter applied:"); try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) { for (Path file : ds) { Map<String, Object> fileInfo = new HashMap<>(); fileInfo.put("name", file.getFileName().toString()); // Prints Files in Director // Files.getAttribute(file,"size"); System.out.println("name:" + file.getFileName().toString() + "\n" + "mime:" + Files.probeContentType(file) + "\n" + "locked:" + !Files.isWritable(file)); ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(fileInfo); files.add(json); } } catch (IOException e) { System.err.println(e); } files.toArray(); filesMap.put("files", files); ObjectMapper mapper = new ObjectMapper(); String jsonString; try { jsonString = mapper.writeValueAsString(filesMap); } catch (IOException e) { jsonString = "fail"; //To change body of catch statement use File | Settings | File Templates. }
Puts out the following json which is closer, but I can't figure out why the extra quotes before and after the {}.
{"files":["{\"name\":\"32C92124-EFCF-42C1-AFD2-8B741AE6854B.jpg\"}","{\"name\":\"58D5B83F-4065-4D6E-92BE-8181D99CB6CB.jpg\"}","{\"name\":\"7B1464A0-FBA1-429E-8A39-3DE5B539FBF8.jpg\"}","{\"name\":\"888159CF-45BE-475F-8C6A-64B3E1D97278.jpg\"}"]}
Final Answer
Map<String, Object> filesMap = new HashMap<>(); List<Object> files = new ArrayList<Object>(); System.out.println("\nNo filter applied:"); try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) { for (Path file : ds) { Map<String, Object> fileInfo = new HashMap<>(); fileInfo.put("name", file.getFileName().toString()); System.out.println("name:" + file.getFileName().toString() + "\n" + "mime:" + Files.probeContentType(file) + "\n" + "locked:" + !Files.isWritable(file)); files.add(fileInfo); } } catch (IOException e) { System.err.println(e); } files.toArray(); filesMap.put("files", files); ObjectMapper mapper = new ObjectMapper(); String jsonString; try { jsonString = mapper.writeValueAsString(filesMap); } catch (IOException e) { jsonString = "fail"; }
Converting Java object to JSON In it, create an object of the POJO class, set required values to it using the setter methods. Instantiate the ObjectMapper class. Invoke the writeValueAsString() method by passing the above created POJO object. Retrieve and print the obtained JSON.
The Jackson ObjectMapper can parse JSON from a string, stream or file, and create a Java object or object graph representing the parsed JSON. Parsing JSON into Java objects is also referred to as to deserialize Java objects from JSON. The Jackson ObjectMapper can also create JSON from Java objects.
You need a JsonNodeFactory
:
final JsonNodeFactory factory = JsonNodeFactory.instance;
This class has methods to create ArrayNode
s, ObjectNode
s, IntNode
s, DecimalNode
s, TextNode
s and whatnot. ArrayNode
s and ObjectNode
s have convenience mutation methods for adding directly most JSON primitive (non container) values without having to go through the factory (well, internally, they reference this factory, that is why).
As to an ObjectMapper
, note that it is both a serializer (ObjectWriter
) and deserializer (ObjectReader
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With