Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的Json预处理_Java_Json - Fatal编程技术网

java中的Json预处理

java中的Json预处理,java,json,Java,Json,我有带有不同字段名的json,其中包含我感兴趣的值。他们来自不同的来源。我想把我感兴趣的领域合并成一个共同的名字。例如: 这是原始json: {"movieName":"A","Leadactor":"","leadActress":"","movieTitle":"","hero":"","heroine":"","source":"IMDB"} {"movieName":"","Leadactor":"","leadActress":"","movieTitle":"B","hero":"B

我有带有不同字段名的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"}
我想的解决方案是使用regex删除所有具有空值的字段,然后将movieName和movieTitle替换为Name。其他领域也是如此


有没有更好的方法来处理这个问题。我得到的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){

        }
    }

}

您可以通过创建自己的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){

        }
    }

}

我的建议是使用gson和covert将上面的JSON字符串转换为如下映射:

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

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

我的建议是使用gson并将上面的JSON字符串转换为如下映射:

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

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

使用JSON流解析器,如或


它们速度非常快,内存效率很高,为您节省了大量编码方面的麻烦,并且很容易在像您这样的简单结构上实现

使用JSON流式解析器,如或


它们速度非常快,内存效率很高,为您节省了大量编码方面的麻烦,并且很容易在像您这样的简单结构上实现

JSON具有上下文无关语法。而且正则表达式不能可靠地解析这些语法

例如,使用正则表达式无法可靠解析此JSON:

{movie : "Apocalypse Now", director : {first_name: "Francis", last_name: "Ford Coppola"}}
因为它有嵌套的花括号,所以正则表达式将匹配最后一个括号的旁边,作为整个表达式的结尾。
换句话说,当存在嵌套表达式时,JSON、XML、javascript等使用专门的解析器,因为正则表达式无法处理它。

JSON具有上下文无关语法。而且正则表达式不能可靠地解析这些语法

例如,使用正则表达式无法可靠解析此JSON:

{movie : "Apocalypse Now", director : {first_name: "Francis", last_name: "Ford Coppola"}}
因为它有嵌套的花括号,所以正则表达式将匹配最后一个括号的旁边,作为整个表达式的结尾。
换句话说,当存在嵌套表达式时,JSON、XML、javascript等使用专门的解析器,因为正则表达式无法处理它。

使用JSON库而不是正则表达式。我之前使用过jackson和gson。他们正在创建java对象,我认为在前端显示这些对象是过分的。我的意思是,我必须为1000个json结果创建10000个java对象。我正在寻找超快速和内存高效的方法,因为我得到的json非常巨大。正如名称所示,您可以使用简单的方法。看看解码示例4,你可以将一个简单的对象解码成一个映射,修改映射并从那里重新编码。使用JSON库而不是正则表达式。我之前使用过jackson和gson。他们正在创建java对象,我认为在前端显示这些对象是过分的。我的意思是,我必须为1000个json结果创建10000个java对象。我正在寻找超快速和内存高效的方法,因为我得到的json非常巨大。正如名称所示,您可以使用简单的方法。看看解码示例4,你可以将一个简单的对象解码成一个映射,修改映射并从那里重新编码。我一行一行地读来做你说的事。我们的json很大。因此,处理过程需要10秒。你认为线程技术在这里有帮助吗?或者任何其他的建议可以加快它的速度。@javaMan:因为这个问题解决了一个不同的问题,而不是这个时间问题,我建议你在这里创建一个新的问题来解决你的时间问题,这样你就可以得到更好的答案。我在这里发布了一个新问题:Hi@anubhava,我得到一个json流。我一行一行地读来做你说的事。我们的json很大。因此,处理过程需要10秒。你认为线程技术在这里有帮助吗?或者任何其他建议都可以加速它。@javaMan:因为这个问题解决了一个不同的问题,而不是这个时间问题,所以我建议你在这里创建一个新问题,这样你就可以得到更好的答案。我在这里发布了一个新问题: