SerializeReadonlyField.java

package net.minidev.json.test;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONValue;
import org.junit.jupiter.api.Test;

public class SerializeReadonlyField {
  /** https://github.com/netplex/json-smart-v2/issues/49 */
  @Test
  public static void main(String[] args) {
    MyData data = new MyData("a");
    Map<String, Object> m = new HashMap<>();
    m.put("data", data);
    String a = new JSONObject(m).toString();
    assertEquals("{\"data\":{\"someField\":\"a\"}}", a.toString());
  }

  public static class MyData {
    private String someField;

    public MyData(String someField) {
      this.someField = someField;
    }

    public String getSomeField() {
      return someField;
    }

    // Remove comment to make serialization to work
    /*
     * public void setSomeField(String someField) { this.someField = someField; }
     */
  }

  /** https://github.com/netplex/json-smart-v2/issues/59 */
  @Test
  public void test() {
    // should not crash
    Map<String, Object> cachedTable1 = new LinkedHashMap<>();
    Iterable<Path> path = Paths.get("/");
    cachedTable1.put("1", path);
    JSONValue.toJSONString(cachedTable1);
  }
}