TestUUID.java

package net.minidev.json.testMapping;

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

import java.io.IOException;
import java.util.UUID;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONStyle;
import net.minidev.json.JSONValue;
import net.minidev.json.parser.ParseException;
import net.minidev.json.reader.JsonWriterI;
import net.minidev.json.writer.JsonReaderI;
import org.junit.jupiter.api.Test;

public class TestUUID {
  @Test
  void testUUID() throws ParseException {
    JSONObject obj = new JSONObject();
    UUID uuid = new UUID(123, 456);
    JSONValue.registerWriter(
        UUID.class,
        new JsonWriterI<UUID>() {
          @Override
          public void writeJSONString(UUID value, Appendable out, JSONStyle compression)
              throws IOException {
            out.append(value.toString());
          }
        });

    JSONValue.registerReader(
        UUIDHolder.class,
        new JsonReaderI<UUIDHolder>(JSONValue.defaultReader) {
          @Override
          public void setValue(Object current, String key, Object value)
              throws ParseException, IOException {
            if ("v".equals(key)) {
              ((UUIDHolder) current).setV(UUID.fromString((String) value));
              return;
            }
            super.setValue(current, key, value);
          }

          @Override
          public Object createObject() {
            return new UUIDHolder();
          }
        });

    obj.put("v", uuid);
    String asText = obj.toJSONString();
    assertEquals("{\"v\":00000000-0000-007b-0000-0000000001c8}", asText);
    UUIDHolder rebuild = JSONValue.parseWithException(asText, UUIDHolder.class);
    assertEquals(uuid, rebuild.getV());
  }

  public static class UUIDHolder {
    private UUID v;

    public UUID getV() {
      return v;
    }

    public void setV(UUID uuid) {
      this.v = uuid;
    }
  }
}