mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34:20 +03:00
Возможность задать отступ в jsonencode
This commit is contained in:
parent
23ed9e6d04
commit
d3b5d9f059
@ -27,7 +27,7 @@ public final class ValueUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static Object toObject(MapValue map) {
|
||||
public static JSONObject toObject(MapValue map) {
|
||||
final JSONObject result = new JSONObject();
|
||||
for (Map.Entry<Value, Value> entry : map) {
|
||||
final String key = entry.getKey().asString();
|
||||
@ -37,7 +37,7 @@ public final class ValueUtils {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Object toObject(ArrayValue array) {
|
||||
public static JSONArray toObject(ArrayValue array) {
|
||||
final JSONArray result = new JSONArray();
|
||||
for (Value value : array) {
|
||||
result.put(toObject(value));
|
||||
|
@ -1,25 +1,57 @@
|
||||
package com.annimon.ownlang.modules.json;
|
||||
|
||||
import com.annimon.ownlang.lib.Arguments;
|
||||
import com.annimon.ownlang.lib.ArrayValue;
|
||||
import com.annimon.ownlang.lib.Function;
|
||||
import com.annimon.ownlang.lib.MapValue;
|
||||
import com.annimon.ownlang.lib.StringValue;
|
||||
import com.annimon.ownlang.lib.Types;
|
||||
import com.annimon.ownlang.lib.Value;
|
||||
import com.annimon.ownlang.lib.ValueUtils;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONWriter;
|
||||
|
||||
|
||||
public final class json_encode implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
Arguments.check(1, args.length);
|
||||
public Value execute(Value[] args) {
|
||||
Arguments.checkOrOr(1, 2, args.length);
|
||||
try {
|
||||
final int indent;
|
||||
if (args.length == 2) {
|
||||
indent = args[1].asInt();
|
||||
} else {
|
||||
indent = 0;
|
||||
}
|
||||
|
||||
final String jsonRaw;
|
||||
if (indent > 0) {
|
||||
jsonRaw = format(args[0], indent);
|
||||
} else {
|
||||
final Object root = ValueUtils.toObject(args[0]);
|
||||
final String jsonRaw = JSONObject.valueToString(root);
|
||||
jsonRaw = JSONWriter.valueToString(root);
|
||||
}
|
||||
return new StringValue(jsonRaw);
|
||||
|
||||
} catch (JSONException ex) {
|
||||
throw new RuntimeException("Error while creating json", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private String format(Value val, int indent) {
|
||||
switch (val.type()) {
|
||||
case Types.ARRAY:
|
||||
return ValueUtils.toObject((ArrayValue) val).toString(indent);
|
||||
case Types.MAP:
|
||||
return ValueUtils.toObject((MapValue) val).toString(indent);
|
||||
case Types.NUMBER:
|
||||
return JSONWriter.valueToString(val.raw());
|
||||
case Types.STRING:
|
||||
return JSONWriter.valueToString(val.asString());
|
||||
default:
|
||||
return JSONWriter.valueToString(JSONObject.NULL);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user