gson est également pratique, mais je l'ai trouvé gênant, comme ne pas pouvoir tracer plusieurs couches à la fois, donc je crée un tel outil. De plus, il y a de nombreuses raisons ennuyeuses pour lesquelles "je veux vraiment utiliser Gson dans le système XX, mais l'approbation interne est gênante".
Vous pouvez l'utiliser comme ça.
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"); // <-Je veux faire ça
		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]);
		}
	}
}
Voici le code source. N'hésitez pas à le copier ou à le modifier avant utilisation.
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