1
mirror of https://github.com/CarmJos/BukkitJSONSerializer.git synced 2026-06-04 16:48:18 +08:00

5 Commits

3 changed files with 33 additions and 13 deletions
+10 -10
View File
@@ -16,26 +16,26 @@ A JSON serialize/deserialize util for bukkit's ConfigurationSerialization.
First, we should get the serializer instance or create a new one. First, we should get the serializer instance or create a new one.
```java ```java
BukkitJSONSerializer serializer=BukkitJSONSerializer.get(); BukkitJSONSerializer serializer = BukkitJSONSerializer.get();
``` ```
Then, we cloud use `BukkitJSONSerializer#serializeToJSON(ConfigurationSerializable)` to serialize a object to JSON. Then, we cloud use `serializeToJSON(ConfigurationSerializable)` to serialize a object to JSON.
```jave ```jave
Location location = new Location(Bukkit.getWorlds().get(0), -100.5, 100, 105.5); Location location = new Location(Bukkit.getWorlds().get(0), -100.5, 100, 105.5);
String serialized = BukkitJSONSerializer.serializeToJSON(location); String serialized = serializer.serializeToJSON(location);
// serialized -> {"world":"world","x":-100.5,"y":100,"z":105.5,"yaw":0.0,"pitch":0.0} // -> {"world":"world","x":-100.5,"y":100,"z":105.5,"yaw":0.0,"pitch":0.0}
``` ```
When we need to read the object, just use `BukkitJSONSerializer#deserializeSON(json,typeClass)` to deserialize the JSON When we need to read the object, just use `deserializeJSON(json,typeClass)` to deserialize the JSON
string. string.
```java ```java
Location location = serializer.deserializeSON(json, Location.class); Location location = serializer.deserializeJSON(json, Location.class);
// deserialized -> Location{world=world, x=-100.5, y=100, z=105.5, pitch=0.0, yaw=0.0} // Location{world=world, x=-100.5, y=100, z=105.5, pitch=0.0, yaw=0.0}
``` ```
Or use `BukkitJSONSerializer#deserializeSON(json,typeClass,defaultValue)` if we need a default value. Or use `deserializeSON(json,typeClass,defaultValue)` if we need a default value.
### JSONSerializable class ### JSONSerializable class
@@ -114,4 +114,4 @@ dependencies {
## Open Source License. ## Open Source License.
The project using [GNU LESSER GENERAL PUBLIC LICENSE](https://www.gnu.org/licenses/lgpl-3.0.html) . The project using [GNU LESSER GENERAL PUBLIC LICENSE](https://www.gnu.org/licenses/lgpl-3.0.html) .
+1 -1
View File
@@ -13,7 +13,7 @@
</properties> </properties>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<artifactId>bukkitjsonserializer</artifactId> <artifactId>bukkitjsonserializer</artifactId>
<version>1.0.0</version> <version>1.0.2</version>
<name>BukkitJSONSerializer</name> <name>BukkitJSONSerializer</name>
<description>A JSON serialize/deserialize util for bukkit's ConfigurationSerialization.</description> <description>A JSON serialize/deserialize util for bukkit's ConfigurationSerialization.</description>
@@ -10,6 +10,7 @@ import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.math.BigDecimal;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
@@ -29,8 +30,13 @@ public class BukkitJSONSerializer {
public static final String TYPE_KEY = ConfigurationSerialization.SERIALIZED_TYPE_KEY; public static final String TYPE_KEY = ConfigurationSerialization.SERIALIZED_TYPE_KEY;
public static final BukkitJSONSerializer INSTANCE = BukkitJSONSerializer.create(); public static final BukkitJSONSerializer INSTANCE = BukkitJSONSerializer.create();
public static @NotNull BukkitJSONSerializer create() { public static @NotNull BukkitJSONSerializer create() {
return create(new GsonBuilder().disableHtmlEscaping().create(), new JsonParser()); return create(new GsonBuilder().enableComplexMapKeySerialization().serializeNulls().disableHtmlEscaping().create());
}
public static @NotNull BukkitJSONSerializer create(@NotNull Gson gson) {
return new BukkitJSONSerializer(gson, new JsonParser());
} }
public static @NotNull BukkitJSONSerializer create(@NotNull Gson gson, @NotNull JsonParser parser) { public static @NotNull BukkitJSONSerializer create(@NotNull Gson gson, @NotNull JsonParser parser) {
@@ -163,12 +169,26 @@ public class BukkitJSONSerializer {
} else { } else {
args.put(key, sub); args.put(key, sub);
} }
} else if (v instanceof Double) {
double d = (Double) v;
BigDecimal num = new BigDecimal(d);
long longValue = num.longValue();
String decimalPart = String.valueOf(num.subtract(new BigDecimal(longValue)));
if (decimalPart.matches("^0+$")) {
if (longValue > Integer.MAX_VALUE || longValue < Integer.MIN_VALUE) {
args.put(key, num.longValue());
} else {
args.put(key, num.intValue());
}
}
} else { } else {
args.put(key, v); args.put(key, v);
} }
}); });
return args; return args;
} }
} }