JSON-终于解决了一个需求是什么体验_2

2 篇文章 0 订阅
本文介绍了一种使用Java实现的数据清洗方法,针对JSON数据格式,具体目标是删除line1、line2或line5字段为空的数据记录。通过详细解析代码逻辑,包括数据添加、删除函数设计及主函数调用,展示了如何高效地识别并处理空字段数据。
摘要由CSDN通过智能技术生成

温馨提示:该代码是在前一篇文章的基础上实现的,可以参考 前一篇文章(←链接奉上)

需求

运行代码,将{line1,line2,line5}中任意字段为空的数据删除

需求分析

数据

因为需求是要删除{line1,line2,line5}中任意字段为空的数据,我们就要先找满足条件的数据;
一般来说我们需要两组数据进行测试,一组是满足被删除条件的数据,另一组是不满足删除条件的数据;

逻辑

voidAddData()

添加两组数据,分别命名为jsono1和jsono3,其中jsono1是不满足删除条件的数据,jsono3是满足删除条件的数据;

String Delete(JSONObject json)

顾名思义,这个函数专门实现删除满足条件的数据的逻辑功能;
返回值是String类型,参数是JSONObject类型的json;

首先我们用一个Set< String >类型的keyset1存储所有key值;
将json转成String类型,这个就是为了方便删除操作;
然后我们设置了一个flag标识为1;
对keyset1进行循环,如果key值为line1,line2,line5中的任意一项,且其value值为空, 那就在控制台输出, 并将flag置0;
在所有循环进行完之后再对flag进行判断, 如果还是1, 证明该数据并不满足被删除的条件, 就返回String类型的数据就行了, 如果是0, 证明该数据满足被删除的条件,返回空字符串就行了;

解释

  1. 为啥要把所有key值都取出来对所有key值进行循环?直接对给定key值的value进行判断行不行?
    个人感觉也行, 但我感觉可能把所有key值都取出来再做循环的操作比较严谨, 如果需求变更了, 改起来也比较方便;

  2. 为啥要设置flag值?直接在判断里返回不行吗?
    设置flag主要还是方便一些, 如果写在判断里,就要写好多return, 可读性就下降了, 也有可能漏掉一些情况,导致报错, 再就还是需求如果变更, 改起来方便一些;

main()

main函数是程序的入口,主要就是运行AddData()和Delete()函数;

代码实现

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"+Delete(j)+"\n--");
	}
	private static void AddData() {
		jsono1.put("line1","11");
		jsono1.put("line2","12");
		jsono1.put("line3","13");
		jsono1.put("line4","");
		jsono1.put("line5","15");
		
		jsono3.put("line1","31");
		jsono3.put("line2","");
		jsono3.put("line3","");
		jsono3.put("line4","");
		jsono3.put("line5","35");
			
	}
	
	private static void Output() {
		System.out.println(jsono1+"\n"+jsono3);
	}
	
	private static String Delete(JSONObject json) {
		Set<String> keyset1=json.keySet();
		String str_json=json.toString();
		int flag=1;
		for(String k : keyset1) {
			if(k=="line1" || k=="line2" || k=="line5") {
				if(json.getString(k)=="") {
					System.out.println(k+" is null");
					flag=0;
				}
			}
		}
		if(flag==1) {
			return str_json;
		}else {
			return "";
		}
	}

}

结果截图

  1. 参数是jsono1时(不满足删除条件)
    在这里插入图片描述
    结果显然, 不满足删除条件的时候, 返回jsono1内容的字符串;
    (第一行的re–和第三行的–只是方便空字符串输出的时候可以看到hhhh)

2.参数是jsono3时(满足删除条件)
在这里插入图片描述

结果显示出了哪一行是空数据, 并返回了空字符串;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值