迭代然后更新JSONArray
@GetMapping("/update-refund-status")
@ApiResponse
@Operation(summary = "用户钱包 交易明细 插入")
public Boolean updateRefundStatus(String allOrderNo,String refundOrderNo,String userId,String currency,String status) {
val one = userWalletLogService.lambdaQuery().eq(CdbUserWalletLog::getUserId, userId).eq(CdbUserWalletLog::getCountry, currency)
.eq(CdbUserWalletLog::getOrderId,allOrderNo).one();
if (one == null) {
DingTalkUtils.alarmException(StrUtil.format("用户中心更新退款交易明细,找不到单子allOrderNo:{} refundOrderNo:{} userId:{} currency{}",allOrderNo,refundOrderNo,userId,currency));
return false;
}
final JSONArray more = JSONArray.parseArray(one.getMore());
for (Object o : more) {
JSONObject item = (JSONObject)o;
if (refundOrderNo.equals(item.getString("refundOrderNo"))) {
item.fluentPut("status",status);
break;
}
}
return userWalletLogService.lambdaUpdate().set(CdbUserWalletLog::getMore,more.toJSONString()).eq(CdbUserWalletLog::getUserId, userId).eq(CdbUserWalletLog::getCountry, currency)
.eq(CdbUserWalletLog::getOrderId,allOrderNo).update();
}
要将一个实体类转换为 com.alibaba.fastjson.JSONObject
YourEntityClass entity = new YourEntityClass(); // 假设这是你的实体类对象
// 将实体类对象转换为 JSONObject
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(entity);
JSONField
import com.alibaba.fastjson.annotation.JSONField;
/**
* @Describle:
* @Author:leiwang15
*/
public class BatchGetRelatedInfo {
@JSONField(name = "device_sum")
Integer deviceSum;
@JSONField(name = "online_sum")
Integer onlineSum;
你了解json吗
JSON就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象
[] 中括号表示数组
-
“” 双引号内是属性或值
- 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {“name”: “Michael”} 可以理解为是一个包含name为Michael的对象
而[{“name”: “Michael”},{“name”: “Jerry”}]就表示包含两个对象的数组
当然了,你也可以使用{“name”:[“Michael”,“Jerry”]}来简化上面一部,这是一个拥有一个name数组的对象
官方约束
JSON官网最新规范规定,如果是字符串,那不管是键或值最好都用双引号引起来
开发约束
001 :需要进行序列化的实体不要参入其他方法,只是写自己的各种属性。
002:属性名称遵循驼峰命名,正例:fatherName 反例:FATHERNAME
003:使用lombok的@Data进行标注,不用自动生成的get set方法
坑1:


这个坑可以使用@JSONField(ordinal = 1,name = “BBB”)来解决
坑2:


这个坑可以使用lombok的@Data解决
坑3:

所以,使用json化为字符串的时候要注意这样:

SerializerFeature
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
SerializerFeature.WriteNullStringAsEmpty
想字符类型字段如果为null,转换输出为”“,而非null ,需要多加一个参数:WriteNullStringAsEmpty
null
Map a = null;
String jsonString = JSON.toJSONString(a);
//这里不会有异常
// jsonString 变为null的字符串
String b = null;
JSONObject jsonObject = JSONObject.parseObject(b);
// 这里没有异常,jsonObject 是个null
5134





