Json 解析学习

数据:{“name”:“userGroup”, “users”: [{“password”:“123123”,“username”:“zhangsan”}, {“password”:“321321”,“username”:“lisi”}]}

需要创建两个 JavaBean,第一个 JavaBean 包括 String 类型的 name,和 List 类型 的 users。因为 users 有中括号,所以是一个 List 的类型。第二个 JavaBean 有 String 类型的 password 和 String 类型的 username。

在创建 JavaBean 时,需要保证成员变量与 json 中的属性是相同的名字,否者会爆出空异常。

第一个 JavaBean

public class UserGroup {
    private String name;
    private List<User> users;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
}

第二个 JavaBean

public class User{
    private String password;
    private String username;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

解析

 Gson gson = new Gson();
 UserGroup group = gson.fromJson(s,UserGroup.class);
 String name = group.getName();
 List<User> beanList = group.getUsers();

https://blog.csdn.net/weixin_43115440/article/details/82979400

构建 bean 对象。

public class Student{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class JavaTest {

    public static void main(String[] args) {
        String json = "{" +
                "'flag':true,'" +
                "data':[" +
                "{'name':'张三','age':18}," +
                "{'name':'李四','age':14}," +
                "{'name':'王二','age':12}]}";

        JsonElement element = JsonParser.parseString(json);

        JsonObject root = element.getAsJsonObject();

        JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");
        boolean flag = flagJson.getAsBoolean();

        JsonArray array = root.getAsJsonArray("data");
        List<Student> students = new ArrayList<>();

        for(JsonElement obj: array){
            students.add(new Gson().fromJson(obj,Student.class));
        }

        System.out.println(flag);
        System.out.println(students.get(0).getName());
        System.out.println(students.get(1).getName());
    }
}
public class JsonCampare {
    public static void main(String[] args) {
        // 输入路径
        String inPath1 = "in/white.csv";
        String inPath2 = "in/hbase.json";
        //输出路径
        String output = "out/result";

        SparkConf conf = new SparkConf().setAppName("JsonCampare");
        conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
        conf.set("spark.driver.maxResultSize", "80g");
        conf.setMaster("local");

        JavaSparkContext jsc = new JavaSparkContext(conf);
        jsc.setLogLevel("ERROR");

        LongAccumulator allAcc = jsc.sc().longAccumulator("all count");
        LongAccumulator satAcc = jsc.sc().longAccumulator("satisfy count");

        JavaPairRDD<String, String> rightRDD = jsc.textFile(inPath2).map(new Function<String, Tuple2<String, String>>() {
            @Override
            public Tuple2<String, String> call(String v1) throws Exception {
                String[] ss = v1.split("\t", -1);

                // url,json
                return new Tuple2<>(ss[0], ss[1]);
            }
        }).mapToPair(new PairFunction<Tuple2<String, String>, String, String>() {
            @Override
            public Tuple2<String, String> call(Tuple2<String, String> tuple2) throws Exception {
                return new Tuple2<>(tuple2._1, tuple2._2);
            }
        });

        JavaPairRDD<String, Tuple2<String,String>> leftRDD = jsc.textFile(inPath1).map(new Function<String, Tuple3<String, String, String>>() {
            @Override
            public Tuple3<String, String, String> call(String v1) throws Exception {
                allAcc.add(1L);
                String[] ss = v1.split("\t", -1);

                //url,属性,属性值
                return new Tuple3<>(ss[0], ss[1], ss[2]);
            }
        }).mapToPair(new PairFunction<Tuple3<String, String, String>, String, Tuple2<String, String>>() {
            @Override
            public Tuple2<String, Tuple2<String, String>> call(Tuple3<String, String, String> tuple3) throws Exception {
                return new Tuple2<>(tuple3._1(), new Tuple2<>(tuple3._2(), tuple3._3()));
            }
        });

        JavaPairRDD<String,Tuple2<Tuple2<String,String>,String>> joinRDD = leftRDD.join(rightRDD);


        JavaRDD<String> resultRDD = joinRDD.map(new Function<Tuple2<String, Tuple2<Tuple2<String, String>, String>>, String>() {
            @Override
            public String call(Tuple2<String, Tuple2<Tuple2<String, String>, String>> v1) throws Exception {
                String url = v1._1;
                String attr = v1._2._1._1;
                String attrVal = v1._2._1._2;
                String jsonStr = v1._2._2;
                JSONObject jsonObject = new JSONObject();
                if(jsonStr.startsWith("{")){
                    jsonObject = JSONObject.parseObject(jsonStr,Feature.DisableSpecialKeyDetect);
                }else{
                    return "";
                }

                boolean flag = false;
                String jsonValue = "";
                if(jsonObject.containsKey(attr)){
                    jsonValue = jsonObject.getString(attr);
//                    System.out.println("jsonValue: "+jsonValue);

                    flag = jsonValue.equals(attrVal);
                }

                String flagStr = flag ? "true":"false";


                return String.join("\t",url,attr,attrVal,jsonValue,flagStr);
            }
        });

        resultRDD.cache();

/*        resultRDD.filter(new Function<String, Boolean>() {
            @Override
            public Boolean call(String v1) throws Exception {
                String[] ss =v1.split("\t",-1);
                String url = ss[0];
                String attr = ss[1];
                String attrVal = ss[2];
                String jsonVal = ss[3];
                String flagStr = ss[4];
                return flagStr.equals("true");
            }
        }).foreach(new VoidFunction<String>() {
            @Override
            public void call(String s) throws Exception {
                System.out.println(s);
            }
        });
*/
        resultRDD.filter(new Function<String, Boolean>() {
            @Override
            public Boolean call(String v1) throws Exception {
                String[] ss =v1.split("\t",-1);
                String url = ss[0];
                String attr = ss[1];
                String attrVal = ss[2];
                String jsonVal = ss[3];
                String flagStr = ss[4];

                if(flagStr.equals("true")){
                    satAcc.add(1L);
                }

                return flagStr.equals("false");
            }
        }).foreach(new VoidFunction<String>() {
            @Override
            public void call(String s) throws Exception {
                System.out.println(s);
            }
        });
        
        System.out.println();
        System.out.println();
        
        String s = "all Count: "+ allAcc.value() +"\t"
                + "satisfy Count: "+ satAcc.value() + "\t"
                + "ratio: " + (double)satAcc.value() / allAcc.value() + "\t";
        System.out.println(s);
        jsc.stop();
    }





public String call(String v1) throws Exception {
     JSONObject jsonObject = new JSONObject();
     String[] ss = v1.split("\t",-1);
     String url =ss[0];
     String json = ss[1];
     if (json.startsWith("{")) {
         try {
             jsonObject = JSONObject.parseObject(json, Feature.DisableSpecialKeyDetect);
         } catch (JSONException e) {
             System.out.println("mti JSONException:" + e.getMessage());
             System.out.println("mtiStr: " + json);
             return url;
         }
     }
     StringBuilder sb = new StringBuilder();
     if (jsonObject.containsKey("porn") ) {
         String jsonHbaseValue = jsonObject.getString("porn");
         sb.append(url);
         sb.append("\t");
         sb.append("child_porn");
         sb.append("\t");
         sb.append(jsonHbaseValue);
         sb.append("####");
     }

     if(jsonObject.containsKey("polity")){
         String jsonHbaseValue = jsonObject.getString("polity");
         sb.append(url);
         sb.append("\t");
         sb.append("politics");
         sb.append("\t");
         sb.append(jsonHbaseValue);
         sb.append("####");
     }

     if(jsonObject.containsKey("drug")){
         String jsonHbaseValue = jsonObject.getString("drug");
         sb.append(url);
         sb.append("\t");
         sb.append("drugs");
         sb.append("\t");
         sb.append(jsonHbaseValue);
         sb.append("####");
     }

     if(jsonObject.containsKey("gamble")){
         String jsonHbaseValue = jsonObject.getString("gamble");
         sb.append(url);
         sb.append("\t");
         sb.append("gambling");
         sb.append("\t");
         sb.append(jsonHbaseValue);
         sb.append("####");
     }
     return sb.toString();

 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值