2

我有带有不同字段名称的 json,其中包含我感兴趣的值。它们来自不同的来源。我想把我感兴趣的领域变成一个通用名称。例如:

这是原始的json:

{"movieName":"A","Leadactor":"","leadActress":"","movieTitle":"","hero":"","heroine":"","source":"IMDB"}
{"movieName":"","Leadactor":"","leadActress":"","movieTitle":"B","hero":"B1","heroine":"B2","source":"Netflix"}
{"movieName":"C","Leadactor":"C1","leadActress":"C2","movieTitle":"","hero":"","heroine":"","source":"IMDB"}
{"movieName":"D","Leadactor":"D1","leadActress":"D2","movieTitle":"","hero":"","heroine":"","source":"IMDB"}
{"movieName":"","Leadactor":"","leadActress":"","movieTitle":"E","hero":"E1","heroine":"E2","source":"Netflix"}

对于源 imdb,我感兴趣的领域与源 netflix 感兴趣的领域不同。我的最终目标是在前端的表格中显示它们。所以试图让我感兴趣的领域进入共同领域。

我想把它转换成:

{Name:"A",Actor"A1",Actress"A2","source":"IMDB"}
{Name:"B",Actor"B1",Actress"B2","source":"Netflix"}
{Name:"C",Actor"C1",Actress"C2","source":"IMDB"}
{Name:"D",Actor"D1",Actress"D2","source":"IMDB"}
{Name:"E",Actor"E1",Actress"E2","source":"Netflix"}

我正在考虑的解决方案是使用正则表达式删除所有具有空值的字段,然后将电影名称和电影标题替换为名称。其他领域也类似。

有没有更好的方法来处理这个问题。(我得到的json非常大。所以寻找超快速的方法来预处理它。)

4

4 回答 4

1

您可以通过创建自己的 JSON“加法器”轻松做到这一点?json.org有一个很好的JSON库,你的代码看起来像这样。

    public static void addJSON(JSONObject one, JSONObject two){
    while(one.keys().hasNext()){
        String key = (String) one.keys().next();
        try{
            if(one.getString(key).equals("")){
                one.put(key, two.get(key));
            }
        }catch(JSONException e){

        }
    }

}
于 2013-03-21T17:27:05.447 回答
1

我的建议是在 JSON 字符串之上使用 gson 和隐蔽到这样的 Map:

Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> map =
                 gson.fromJson("{'key1':'foo','key2':'bar', 'key3', ''}", type);

一旦你得到你的地图,然后 simlpy 迭代并删除所有具有空值的元素。之后,您可以从此地图生成您的 JSON 字符串。

于 2013-03-21T17:27:07.680 回答
1

使用 JSON 流解析器,如json-simpleJackson

它们非常快,内存高效,为您节省了大量的编码难题,并且易于在像您这样的简单结构上实现。

于 2013-03-21T17:28:54.883 回答
1

JSON 具有上下文无关语法。并且 REGEX 不能可靠地解析这样的语法。

例如,这个 JSON 不可能用 regex 可靠地解析:

{movie : "Apocalypse Now", director : {first_name: "Francis", last_name: "Ford Coppola"}}

因为它有嵌套的花括号,正则表达式将匹配最后一个括号旁边的整个表达式。换句话说,当存在嵌套表达式(JSON、XML、javascript 等)时,使用专门的解析器,因为正则表达式无法处理它。

于 2013-03-21T17:35:29.523 回答