数据:{“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();
}