title: Creating a json object using jackson
body: <p>How can I create a json array like the example below using jackson. </p>
  
  <p>I tried using ObjectMapper, but this does not seem correct. </p>
  
  <pre><code>      try (DirectoryStream&lt;Path&gt; 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);
          }
  </code></pre>
  
  <p>Eventually I will be making a json that has the below values. </p>
  
  <pre><code> * - (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
  </code></pre>
  
  <p>Here is an example json I was provided.</p>
  
  <pre><code>"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
      }
  ]
  </code></pre>
  
  <p>EDIT 1</p>
  
  <pre><code>        Map&lt;String, Object&gt; filesMap = new HashMap&lt;&gt;();
          List&lt;Object&gt; files = new ArrayList&lt;Object&gt;();
          System.out.println("\nNo filter applied:");
          try (DirectoryStream&lt;Path&gt; ds = Files.newDirectoryStream(path)) {
              for (Path file : ds) {
                  Map&lt;String, Object&gt; fileInfo = new HashMap&lt;&gt;();
                  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.
          }
  </code></pre>
  
  <p>Puts out the following json which is closer, but I can't figure out why the extra quotes before and after the {}.</p>
  
  <pre><code>{"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\"}"]}
  </code></pre>
  
  <p>Final Answer</p>
  
  <pre><code>    Map&lt;String, Object&gt; filesMap = new HashMap&lt;&gt;();
      List&lt;Object&gt; files = new ArrayList&lt;Object&gt;();
      System.out.println("\nNo filter applied:");
      try (DirectoryStream&lt;Path&gt; ds = Files.newDirectoryStream(path)) {
          for (Path file : ds) {
              Map&lt;String, Object&gt; fileInfo = new HashMap&lt;&gt;();
              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"; 
      }
  </code></pre>