如何从复杂结构化数据中的一行代码中的第N级读取特定值

时间:2016-01-06 10:00:26

标签: java json serialization arraylist gson

我获取的数据结构为一种树(比喻说),嵌套结构包含任何类型及其名称和值。我不确定我是否足够清楚,但我收到的数据看起来如何 - 例如:

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();

0 个答案:

没有答案