我有一个巨大的对象,我当然有它的类,我从中提取一些值,但因为它真的很大,我不知道在哪个列表或我正在寻找的值是什么.
有没有办法创建某种对象分解路由并搜索每个部分的我期望的值,它隐藏在对象的某个地方,我只是在eclipse中找不到它太嵌套了.
我想过使用反射来遍历对象类的所有字段并搜索每个字段内的值(列表中的字段(列表列表等)).还有其他想法吗?
不幸的是,这些答案都没有帮助我,我正在开始赏金
解决方法
我假设你只想找到一个特定的值并追踪它的来源.而这一切,你想在调试时做.我建议两种选择.
选项1
使用JSON – 将对象序列化为json字符串,并对结果执行手动文本搜索.你需要json.jar(或任何其他解析器).
try { System.out.println(new JSONObject(new YourHugeObject()).toString(5)); } catch (JSONException e) { log(e); }
哪个会产生这样的东西. (我通过创建一个带有一些嵌套字段,列表,地图的对象来模拟这个)
{ "ct": { "a": 1,"b": "sdf","f": 12,"nested": { "key1": { "kk": "kk","ssdf": 123 },"onemorekey": { "kk": "kk","ssdf": 123 } } },"doubleProp": 12.2,"lngprop": 1232323,"strProp": "123","stringlist": [ "String1","String2","String3" ] }
选项2
将对象转换/序列化为XML.使用XStream,这将是所有可用解析器中最简单的.只需两行代码,
XStream stream = new XStream(); System.out.println(stream.toXML(new YourHugeObject()));
哪个会产生,
<com.kmg.jsontools.test.JSTest> <stringlist> <string>String1</string> <string>String2</string> <string>String3</string> </stringlist> <strProp>123</strProp> <doubleProp>12.2</doubleProp> <lngprop>1232323</lngprop> <ct> <a>1</a> <b>sdf</b> <f>12.0</f> <nested> <entry> <string>key1</string> <com.kmg.jsontools.test.Type1> <kk>kk</kk> <ssdf>123</ssdf> </com.kmg.jsontools.test.Type1> </entry> <entry> <string>onemorekey</string> <com.kmg.jsontools.test.Type1> <kk>kk</kk> <ssdf>123</ssdf> </com.kmg.jsontools.test.Type1> </entry> </nested> </ct> </com.kmg.jsontools.test.JSTest>
无论上述哪种方法,您都可以将结果打印到控制台或文件并手动检查.或者,您也可以使用反射,在这种情况下,您还必须编写大量代码并花费大量时间进行测试.