تحليل JSON إلى Java Bean
سؤال
أحاول تحليل ملف JSON مثل هذا ، تم إنشاؤه بواسطة Exiftool:
[{
"SourceFile": "videos/XaviHernandez.flv",
"ExifTool": {
"ExifToolVersion": 8.22
},
"System": {
"FileName": "XaviHernandez.flv",
"Directory": "videos",
"FileSize": "16 MB",
"FileModifyDate": "2010:06:17 09:57:21+02:00",
"FilePermissions": "rw-r--r--"
},
"File": {
"FileType": "FLV",
"MIMEType": "video/x-flv"
}
}]
في حبة جافا مع هذا الهيكل:
public class MetadataContentBean {
ExifToolBean exiftoolBean;
String SourceFile;
FileBean fileBean;
SystemBean systemBean;
//Getters and setter
}
رمز Java الخاص بي هو:
InputStream is = this.getClass().getClassLoader().getResourceAsStream(filename);
String jsonTxt = IOUtils.toString(is);
JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonTxt);
JSONObject metadatacontent = json.getJSONObject(0);
ObjectMapper mapper = new ObjectMapper();
MetadataContentBean meta = new MetadataContentBean();
mapper.readValue(metadatacontent.toString(), MetadataContentBean.class);
meta= (MetadataContentBean) JSONObject.toBean(metadatacontent, MetadataContentBean.class);
لكني أحصل على هذا الخطأ:
net.sf.json.JSONException: java.lang.NoSuchMethodException: Unknown property 'ExifTool'
at net.sf.json.util.PropertySetStrategy$DefaultPropertySetStrategy.setProperty(PropertySetStrategy.java:45)
at net.sf.json.JSONObject.setProperty(JSONObject.java:1477)
at net.sf.json.JSONObject.toBean(JSONObject.java:468)
at net.sf.json.JSONObject.toBean(JSONObject.java:253)
at com.playence.parser.JSon.Parser(JSon.java:66)
at com.playence.parser.JSon.main(JSon.java:28)
Caused by: java.lang.NoSuchMethodException: Unknown property 'ExifTool'
لقد راجعت العديد من المنتديات ، لكن الحل هو هذا ، لذلك لا أعرف لماذا لا أحصل على نتائج.
اي فكرة؟
المحلول
ObjectMapper mapper = new ObjectMapper();
MetadataContentBean meta= mapper.readValue(metadatacontent.toString(), MetadataContentBean.class);
في هذه الفوقية كل المعلومات
نصائح أخرى
يمزج السؤال com.fasterxml.jackson
و net.sf.json
مكتبات قابلة للتبديل.
أعطى blanca إجابة لجاكسون. وهنا net.sf.json
بديل:
JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonTxt);
JSONObject metadatacontent = json.getJSONObject(0);
MetadataContentBean meta = (MetadataContentBean) JSONObject.toBean(metadatacontent, MetadataContentBean.class);
ال NoSuchMethodException: Unknown property 'ExifTool'
تم إلقاؤه بسبب propertySetStrategy.default يتطلب الحقول العامة أو المستوطنين ، على ما أعتقد.
لا تنتمي إلى StackOverflow