需求
原需求
(MapReduce向)运行代码,删除数据源中缺失值大于3个字段的数据,打印删除数量;
更改后的需求
运行代码,解析json格式数据,删除数据源中缺失值大于3个字段的数据,打印缺失值个数;
需求分析
数据
因为需求是要删除缺失值大于3个字段的数据,所以要先找到缺失值大于3个的数据;
由此可以看出我们需要两组数据进行测试,一组是缺失值不大于3的数据,另一组是缺失值大于3的数据;
逻辑
voidAddData()
添加两组数据,分别命名为jsono1和jsono3,其中jsono1是缺失值不大于3的数据,jsono3是缺失值大于3的数据;
String LackOverThree(JSONObject json)
顾名思义,这个函数就是专门实现主要的逻辑功能;
返回值是String类型,参数是JSONObject类型的json;
主要功能就是经过各种逻辑操作之后,还剩下啥;
如果返回值String为空字符串,那就说明这个json缺失值大于3了,被我们删掉了,如果返回值是String类型的json的内容,那就说明这个json缺失值不大于3,我们并没有删掉它的内容;
main()
main函数是程序的入口,主要就是运行AddData()和LackOverThree()函数;
代码实现
package bdJava;
import java.util.Set;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class one {
static JSONObject jsono1=new JSONObject();
static JSONObject jsono3=new JSONObject();
public static void main(String[] args) {
AddData();
JSONObject j=new JSONObject();
j=jsono3;
System.out.println("re--\n"+LackOverThree(j)+"\n--");
}
private static void AddData() {
//对jsono1和jsono3进行赋值;
jsono1.put("line1","11");
jsono1.put("line2","12");
jsono1.put("line3","13");
jsono1.put("line4","");
jsono1.put("line5","15");
jsono3.put("line1","");
jsono3.put("line2","");
jsono3.put("line3","");
jsono3.put("line4","");
jsono3.put("line5","35");
}
private static String LackOverThree(JSONObject json) {
//创建一个keySet,存放所有的key值,并进行输出验证
Set<String> keyset1=json.keySet();
System.out.println(keyset1);
//将JSONObject类型的json转换为String类型,方便进行后续删除工作
String str_json=json.toString();
//定义一个lack变量,获取缺失的值;
int lack=0;
//设置一个循环,对keySet进行遍历,如果有一个值为空,就将lack加1;循环结束的时候输出lack进行检验,并作为缺失值个数结果;
for(String k : keyset1) {
if(json.getString(k)=="") {
lack++;
}
}
System.out.println(lack);
//如果缺失值大于3个,就返回空该字符串即删除,否则就返回该字符串;
if(lack>3) {
return "";
}else {
return str_json;
}
}
}
总结
(个人学习总结, 仅供参考)
- 数据量大的时候, 建议设置全局变量, 节省空间;
- JSONObject.keySet()获取JSONObject类型的key值集合, 为Set< String >类型;
- 删除json元素的时候建议转为String类型置空, 需要时可再转换为JSONObject类型
- 代码优化!!