我获取的数据结构为一种树(比喻说),嵌套结构包含任何类型及其名称和值。我不确定我是否足够清楚,但我收到的数据看起来如何 - 例如:
customerId (Integer)
|__ listOfCoustomers (List)
|__ first_name (String)
|__ last_name (String)
|__ birth_date (Date)
|__ address (Address)
|__ ccountry (String)
|__ city (String)
|__ street (String)
|__ is_employed (Integer)
|__ previous jobs (List)
|__ job_title (Jobs)
|__ job_description (String)
|__ worked_from (Date)
|__ worked_until (Date)
|__ recieved_salary_in_currency (NameValuePair)
|__ name (Decimal)
|__ value (Sting)
|__ group_id (Integer)
|__ occupation (Occupations)
|__ name (String)
|__ year (NameValuePair)
|__ name (String)
|__ value (String)
|__ description (String)
|__ occupaction_place (String)
|__ occupation_address (Address)
|__ city (String)
|__ occupation_sight (Integer)
|__ street (String)
...... and so on
此结构可以在customerId之后轻松启动,如List:
customerId (Integer)
|__ Customer (Object)
|__ first_name (String)
|__ last_name (String)
....
我认为你得到了这样的结论:我可以在这个数据结构中接受无限级别的点头,它们可以包含所有类型:List,Object,String,Integer,NameValuePair或其他 - 并且没有限制何时可以出现一些类类型。我没有收到文件,我在一个大对象中接受了这个。而且我不想将其转换为文件并通过例如XML进行解析,因为我认为我没有时间这样做,我认为在转换为JSON时可以轻松完成。
现在,有了这个数据集,当我在我的java代码中读取值时,对我来说这是非常慢的。我把它变成了大型List。我的任务是获取一些数据的值并将其存储在数据库中。现在,根据我的方法,我必须为大量数据进行循环,并正确地编写和测试以获得真正的父或子,这很慢。对于我必须为循环做的每个列表都要小心,因为我的父节点正在改变,我可以用单行抓取任何东西。对于每个不同的嵌套,我必须编写类似但不一样的方法。通过编写自定义方法来获取数据,我设法加快了相对速度 - 但这只是带走了2行代码来获取某些特定值。我不必从List对象中获取每个值,也不必从整个数据集中获取每个值。但是因为我必须依赖这个List并且必须检查什么是嵌套而什么不是,所有内容仍然显示。
所以我想知道,我可以将整个数据集转换为某些例如JSON结构吗? GSON还是其他一些图书馆?我希望能够在一行代码中更容易地从例如第6个节点读取值。目前,我不能这样做,因为当我到达某个列表时,我必须在其中循环
但我认为一些数据序列化或转换为JSON可以做到更容易获取某些值的技巧,例如,从第16个节点,第1个节点或任何我喜欢的节点。
我想写这样的东西(或类似的,这只是想法)并从我想要的每个特定对象中获取价值:
String obj = node1.node2.node3.node4....node16.getValue().toString();
我目前无法做到这一点。至少我无法管理它。我想我可能会用各种深度数组本机Java方法来获得它,但我无法弄明白(我对Java并不那么新)。也许我可以这样做 - 也许我不需要GSON? 我设法用.get(" name")获取一些值,但在那之后,当涉及到一些List时,我必须再次循环它。在我看来,变换名称和它们的值将是一个很好的方法。
如何避免使用for循环读取每个特定值,而是在1行中读取它?
如果我足够清楚。可以吗? 我还需要在代码中向我展示解决方案。
修改 我发现当List类型出现时我仍然需要使用循环(我仍然需要迭代它,因为列表的大小可能是动态的,所以我需要逐个项目),但不过,我的问题代表 - 数据可以更优雅地被抓住吗?我想Eclipse给我提供GSON或类似库中的代码完成方法,在按下点(。) - 新级别然后下一级(如果存在的话)之后动态提供我..和最后的值。这就是我的意思:
String obj = node1.node2.node3.node4....node16.getValue().toString();