为了账号安全,请及时绑定邮箱和手机立即绑定

当值为日期时,如何使用 Java 在 JSON 字符串中添加引号

当值为日期时,如何使用 Java 在 JSON 字符串中添加引号

宝慕林4294392 2022-06-08 17:42:16
在需要读取 Java 中的 JSON 对象的情况下,我遇到了困难,该对象在键中没有双引号,也没有值,如下例所示:"{id: 267107086801, productCode: 02-671070868, lastUpdate: 2018-07-15, lastUpdateTimestamp: 2018-07-15 01:49:58, user: {pf: {document: 123456789, name: Luis Fernando}, address: {street: Rua Pref. Josu00e9 Alves Lima,number:37}, payment: [{sequential: 1, id: CREDIT_CARD, value: 188, installments: 9}]}"replaceAll我可以使用下面的代码和Gson库在字段中添加双引号:String jsonString = gson.toJson (obj);String jsonString = jsonString.replaceAll ("([\\ w] +) [] *:", "\" $ 1 \ ":"); // to quote before: valuejsonString = jsonString.replaceAll (": [] * ([\\ w @ \\.] +)", ": \" $ 1 \ ""); // to quote after: value, add special character as needed to the exclusion list in regexjsonString = jsonString.replaceAll (": [] * \" ([\\ d] +) \ "", ": $ 1"); // to un-quote decimal valuejsonString = jsonString.replaceAll ("\" true \ "", "true"); // to un-quote booleanjsonString = jsonString.replaceAll ("\" false \ "", "false"); // to un-quote boolean但是,带有日期的字段被错误地分解,例如:"{"id" : 267107086801,"productCode" : 02-671070868,"lastUpdate" : 2018-07-15,"lastUpdateTimestamp" : 2018-07-15 "01" : 49 : 58,"user" :{"pf":{"document" : 123456789, "name" : "Luis" Fernando},"address" :{"street" : "Rua"Pref.Josu00e9AlvesLima,"number" : 37},"payment" : [{"sequential" : 1,"id" : "CREDIT_CARD","value" : 188,"installments" : 9}]}"此外,带有空格的字符串也是错误的。我该如何纠正这个逻辑?我究竟做错了什么?提前致谢。
查看完整描述

2 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

   String incorrectJson = "{id: 267107086801, productCode: 02-671070868,"

            + " lastUpdate: 2018-07-15, lastUpdateTimestamp: 2018-07-15 01:49:58,"

            + " user: {pf: {document: 123456789, name: Luis Fernando},"

            + " address: {street: Rua Pref. Josu00e9 Alves Lima,number:37},"

            + " payment: [{sequential: 1, id: CREDIT_CARD, value: 188, installments: 9}]}";


    String correctJson = incorrectJson.replaceAll("(?<=: ?)(?![ \\{\\[])(.+?)(?=,|})", "\"$1\"");

    System.out.println(correctJson);

输出:


{id:“267107086801”,productCode:“02-671070868”,lastUpdate:“2018-07-15”,lastUpdateTimestamp:“2018-07-15 01:49:58”,用户:{pf:{document:“123456789 ",姓名:"Luis Fernando"},地址:{街道:"Rua Pref. Josu00e9 Alves Lima",编号:"37"},付款:[{sequential:"1",id:"CREDIT_CARD",值:" 188”,分期付款:“9”}]}


非平凡的正则表达式的一个缺点是它们很难阅读。我在这里使用的匹配每个文字值(但不匹配对象或数组的值)。我使用冒号、逗号和大括号来指导匹配,所以我不需要关心每个字符串值内部的内容,它可以是任何字符(逗号或右大括号除外)。零件的意思是:


(?<=: ?):在值之前有一个冒号和一个可选的空格(后视)

(?![ \\{\\[])该值不以空白、花括号或方括号开头(负前瞻;空白,因为我们不希望冒号和值之间有空白作为值的一部分)

(.+?):该值由至少一个字符组成,尽可能少(不情愿的量词;或者正则表达式会尝试获取字符串的其余部分)

(?=,|}): 值后是逗号或右花括号(正向前瞻)。

如果不精通 JSON,我认为您不需要引用名称。不过,您可以:


    String correctJson = incorrectJson.replaceAll(

            "(?<=\\{|, ?)([a-zA-Z]+?): ?(?![ \\{\\[])(.+?)(?=,|})", "\"$1\": \"$2\"");

{“id”:“267107086801”,“productCode”:“02-671070868”,“lastUpdate”:“2018-07-15”,“lastUpdateTimestamp”:“2018-07-15 01:49:58”,用户: {pf:{“document”:“123456789”,“name”:“Luis Fernando”},地址:{“street”:“Rua Pref. Josu00e9 Alves Lima”,“number”:“37”},付款:[ {“顺序”:“1”,“id”:“CREDIT_CARD”,“价值”:“188”,“分期付款”:“9”}]}


查看完整回答
反对 回复 2022-06-08
?
交互式爱情

TA贡献1712条经验 获得超3个赞

以下代码注意 JSON 字符串中存在的单引号以及包含数字的键

jsonString = jsonString.replaceAll(":",":"); // 键后跳空格 jsonString = jsonString.replaceAll(": ,",":,"); jsonString = jsonString.replaceAll("(?<=: ?)(?![ \{\[])(.+?)(?=,|})", ""$1""); jsonString = jsonString.replaceAll("(?<=\{|, ?)([a-zA-Z0-9]+?)(?=:)",""$1""); jsonString = jsonString.replaceAll(""true"", "true"); // 取消引用 boolean jsonString = jsonString.replaceAll(""false"", "false"); // 取消引用 boolean jsonString = jsonString.replaceAll(""null"", "null");// 取消引用 null jsonString = jsonString.replaceAll(":",", ":"" ,) ; // 删除不必要的双引号 jsonString = jsonString. replaceAll("true"", "true"); // 取消引用 boolean jsonString = jsonString.replaceAll("'",", "',"); // 处理 json 字符串中的单引号 jsonString = jsonString.replaceAll("'},", "'}","); // 将双引号放在以单引号结尾的字符串之后


查看完整回答
反对 回复 2022-06-08
  • 2 回答
  • 0 关注
  • 341 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号