这是我的乐活
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"}
答案 0 :(得分:0)
您可以使用下面的代码段,因为它适合您的情况。
ObjectMapper
可以在Jackson框架中找到。 inputJson
是您提到的JSON字符串。
ObjectMapper mapper = new ObjectMapper();
MediaMetaData mediaMetaDataObj = mapper.readValue( inputJson, MediaMetaData.class );
希望这会有所帮助。
答案 1 :(得分:0)
您必须使用任何json
框架。例如。 Jackson
或Gson
。作为替代,您可以做某事。像这样。只需评估 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;
}