如何将json json字符串转换为json对象

时间:2019-02-06 15:18:40

标签: java json

这是我的乐活

public class Data{
 List<MediaMetaData> mediametadata;
 String owneruid;
}

如果输出是像这样的纯json

{"mediametadata":[{"height":100,"mediatype":"image","mediauid":"sfa0","width":300}],"owneruid":"owneruid"}

然后iam可以无忧无虑地进行转化,但 这是我的输出

{  
  "mediametadata":"[{\"width\":313,\"height\":470,\"mediauid\":\"1521739327417\",\"mediatype\":\"image\"}]",
  "owneruid":"6697729776330393738"
}

im将json字符串转换为字符串,因为要存储在我的数据库中,因为它不接受json,所以当我如上所述查询返回时,因此每次我需要获取值并将其转换为json对象并将其放在列表中时,显示。你能建议我一个更好的方法吗?

当我尝试使用GSON将自定义类列表转换为json

ArrayList<PostMediaMetaData> list=new ArrayList<>();
    PostMediaMetaData postsDa=new PostMediaMetaData();
    postsDa.setHeight(3);
    postsDa.setWidth(4);
    list.add(postsDa);

    Gson gson=new Gson();
    String mediaJson = gson.toJson(list);

 Required:
{"mediametadata":[{"height":100,"mediatype":"image","mediauid":"sfa0","width":300}],"owneruid":"owneruid"}

但是它就这样结束

{"mediametadata":"[{\"width\":313,\"height\":470,\"mediauid\":\"1521739327417\",\"mediatype\":\"image\"}]","owneruid":"6697729776330393738"}

2 个答案:

答案 0 :(得分:0)

您可以使用下面的代码段,因为它适合您的情况。 ObjectMapper可以在Jackson框架中找到。 inputJson是您提到的JSON字符串。

ObjectMapper mapper = new ObjectMapper();
MediaMetaData mediaMetaDataObj = mapper.readValue( inputJson, MediaMetaData.class );

希望这会有所帮助。

答案 1 :(得分:0)

您必须使用任何json框架。例如。 JacksonGson。作为替代,您可以做某事。像这样。只需评估 JavaScript

public static void main(String... args) throws ScriptException {
    ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript");
    Object obj = js.eval("[{\"width\":313,\"height\":470,\"mediauid\":\"1521739327417\",\"mediatype\":\"image\"}]");
    // res is either List<Object> or Map<String, Object> 
    Object res = convertIntoJavaObject(obj);
}

private static Object convertIntoJavaObject(Object obj) {
    if (!(obj instanceof ScriptObjectMirror))
        return obj;

    ScriptObjectMirror mirror = (ScriptObjectMirror)obj;

    if (mirror.isArray())
        return mirror.entrySet().stream()
                     .map(entry -> convertIntoJavaObject(entry.getValue()))
                     .collect(Collectors.toList());

    Map<String, Object> map = new HashMap<>();
    mirror.entrySet().forEach((key, value) -> map.put(key, convertIntoJavaObject(value)));

    return map;
}