gson ist auch praktisch, aber ich fand es problematisch, nicht mehrere Ebenen gleichzeitig verfolgen zu können, also mache ich ein solches Werkzeug. Es gibt auch viele langweilige Gründe, warum "ich Gson wirklich im XX-System verwenden möchte, aber die interne Genehmigung ist problematisch".
Sie können es so verwenden.
public static void main(String[] args) {
String json = "{'test':'this is test','test2':{'test3':'value3'},'test4':['a','b','c']}";
{
Object value = JsonUtil.get(json, "test"); // <-
System.out.println(value); // "this is test"
}
{
Object value = JsonUtil.get(json, "test2.test3"); // <-ich möchte das machen
System.out.println(value); // "value3"
}
{
Object[] value = JsonUtil.getAsArray(json, "test4");
System.out.println(Arrays.toString(value)); // ["a","b","c"]
System.err.println(value.getClass());
for (int n = 0; n < value.length; n++) {
System.err.println(value[n]);
}
}
}
Unten ist der Quellcode. Sie können es vor der Verwendung kopieren oder ändern.
package pkg;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JsonUtil {
public static Object[] getAsArray(String json, String code) {
Object obj = get(json, code);
if (obj instanceof Object[]) {
return (Object[]) obj;
} else {
return null;
}
}
public static Object get(String json, String code) {
// Get the JavaScript engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String script = "var obj = " + json + ";";
try {
engine.eval(script);
{
Object obj = engine.eval("obj." + code);
if (obj instanceof Map) {
java.util.Map map = (java.util.Map) obj;
Set entrySet = map.entrySet();
Object[] arr = new Object[entrySet.size()];
int n = 0;
for (Object objValue : map.values()) {
if (objValue instanceof String) {
String sValue = (String) objValue;
arr[n] = sValue;
} else {
arr[n] = map.get(obj);
}
n++;
}
return arr;
}
return obj;
}
} catch (ScriptException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String json = "{'test':'this is test','test2':{'test3':'value3'},'test4':['a','b','c']}";
{
Object value = JsonUtil.get(json, "test");
System.out.println(value); // "this is test"
}
{
Object value = JsonUtil.get(json, "test2.test3");
System.out.println(value); // "value3"
}
{
Object[] value = JsonUtil.getAsArray(json, "test4");
System.out.println(Arrays.toString(value)); // ["a","b","c"]
System.err.println(value.getClass());
for (int n = 0; n < value.length; n++) {
System.err.println(value[n]);
}
}
}
}
Recommended Posts