精华内容
下载资源
问答
  • 由于框架的问题,获取的json对象属性名是大写,比如Name,与java对象name不对应,所以需要转换为小写。var model = $(gridName,currentObj).getRowDataByRowId(rowid); //json对象 //遍历json对象的属性名 for(var...
    </pre>由于框架的问题,获取的json对象属性名是大写,比如Name,与java对象name不对应,所以需要转换为小写。<pre name="code" class="html">var model = $(gridName,currentObj).getRowDataByRowId(rowid);   //json对象
    //遍历json对象的属性名 
    for(var key in model){
    //首字母为大写的转换,否则跳过
      if(/^[A-Z]/.test(key)){
              var lowerkey = key.toLowerCase();
              //对于带有字符的字段转换,如:CREATE_TIME转成createTime
              var location = lowerkey.indexOf("_" );
              if(location>0){
                   var val = lowerkey.substring(location+1,location+2);
                   lowerkey = lowerkey.replace(new RegExp("_"+val),val.toUpperCase());
              }
             //赋给新的属性名,删除旧的
             model[lowerkey] = model[key];
             delete model[key];
         }
    }
    


    主要用到 字符串对象的toLowerCase(),indexOf(),substring()以及replace()方法。

    replace并不是替换原有的字符串,而是会返回一个新的字符串,这个新的才是所需要的。。,第一参数是正则表达式。

    还有正则表达式对象 new RegExp("_"+val)或者直接定义:/_T/

    展开全文
  • <div><p>json format 需要支持修改key的名字 <p>minglei 说, 我们的java 属性是标准的属性名字, 比如name 但是和第三方对接的时候, 对方的文档要求是 Name, 首字母需要大写的 所以需要增加这么一个功能 背景 我们...
  • 关于实体对象的序列化时Is开头的属性所产生的问题摘要使用的第三方包情景差点重装Android Studio解决方案总结 摘要 今天在开发的时候遇到了一个奇葩问题,记录一下,防止以后遇到,也让一些遇到的小伙伴有点思路; ...

    关于实体对象的序列化时Is开头的属性所产生的问题

    摘要

    今天在开发的时候遇到了一个奇葩问题,记录一下,防止以后遇到,也让一些遇到的小伙伴有点思路;

    使用的第三方包

    用了FastJson作为Json解析工具,网络三件套
    ps:感觉涉及到序列话都会有问题

    情景

    原有的项目是用Java写的,近期在修改部分文件转为Kotlin,不得不说,kotlin的data class是真的香,至少目前很香,虽说遇到了很多坑,当然不是本文的重点,就不谈了。
    好了,继续说,我有一个data class的实体类,
    例如:我有一个类,Student

    // 一个Kotlin 版本的 Student诞生了
    @Parcelize
    data class Student(var name: String? = null,
                       var isLocal: Boolean? = false,//类型::Boolean,is开头,getter方法‘重写为’ getIs...
                       var isBoy: Boolean? = false,//类型::Boolean, is开头,getter方法默认生成  is...
                       var isFoolish: Int? = -1,//类型::Int,is开头,getter方法‘重写为’ getIs...
                       var isLike: String? = null//类型::String,is开头,getter方法默认生成  is...
    ) : Parcelable {
        fun getIsLocal(): Boolean? {
            return isLocal
        }
    
        fun getIsFoolish(): Int? {
            return isFoolish
        }
    }
    
    

    重点关注is开头的几个属性,和对应的Getter方法,接下来我们进行序列化和反序列化,其实就是用创建个对象,用Fastjson进行解析转化为文本,如下:

    class Test {
        //输入co 回车
        companion object {
            //输入maino  回车就出现mian方法了,慎用,容易上瘾
            @JvmStatic
            fun main(args: Array<String>) {
                val student = Student()
                student.name = "张三"  //永远的张三
                student.isLocal = true
                student.isBoy = false
                student.isFoolish = 1
                student.isLike = "跳皮筋"
                val jsonStr = JSONObject.toJSONString(student)
                println("实体转JsonString后::$jsonStr")
                val json = JSONObject.parse(jsonStr)
                println("将Json字符串转化为JSON$json.toString()")
                val newStudent = JSONObject.parseObject(jsonStr, Student::class.java)
                println("将Json字符串转化为实体类$newStudent.toString()")
                println("列举反射成员属性和方法::")
                newStudent::class.members.forEach { println(it.toString()) }
            }
        }
    }
    

    打印结果:

    实体转JsonString后::{ "boy":false, "isFoolish":1, "isLocal":true, "local":true, "name":"张三" }
    将Json字符串转化为JSON{ "name":"张三", "isFoolish":1, "boy":false, "local":true, "isLocal":true }.toString()
    将Json字符串转化为实体类Student(name=张三, isLocal=true, isBoy=false, isFoolish=1, isLike=null).toString()
    枚举反射成员属性和方法::
    var Student.isBoy: kotlin.Boolean?
    var Student.isFoolish: kotlin.Int?
    var Student.isLike: kotlin.String?
    var Student.isLocal: kotlin.Boolean?
    ...
    fun Student.getIsFoolish(): kotlin.Int?
    fun Student.getIsLocal(): kotlin.Boolean?
    

    序列化后导致以下情况:

    1. 不管是否Boolean类型,用data class自动生成的is...方法消失了
    2. 不管是否Boolean类型,通过反编码为Java后,is开头字段的getter方法会变为is…方法
    3. 不管是否Boolean类型,手动“重写”的getter则会不会消失,能通过反射获取
    4. 不管是否Boolean类型,手动“重写”的getter方法也是正常显示

    差点重装Android Studio

    因上次遇到过一次Android studio 的缓存问题,在序列化接口入参的时候一直获取不到某个值,甚至一度认为是Android Studio出的问题,哈哈哈哈,结果不是,真尴尬。

    解决方案

    经过研究测试,总结了三种方案:

    1. 让后台修改字段名,不用这个了(就是这么霸气,你要么别问我要,问我要就必须按我的来) ,不推荐
    2. 上面代码也看到了,手动重写getter,详见上述代码
    3. 本地修改字段名成,并且设置Json序列化的命名,如下修改实体类:
    // 一个Kotlin 版本的 Student诞生了
    @Parcelize
    data class Student(var name: String? = null,
                       @JSONField(name="isLocal")
                       var abc: Boolean? = false,//类型::Boolean,is开头,getter方法‘重写为’ getIs...
                       @JSONField(name="isLocal")
                       var boy1213: Boolean? = false,//类型::Boolean, is开头,getter方法默认生成  is...
                       @JSONField(name="isLocal")
                       var foolishAAAA: Int? = -1,//类型::Int,is开头,getter方法‘重写为’ getIs...
                       @JSONField(name="isLocal")
                       var likeAbc: String? = null//类型::String,is开头,getter方法默认生成  is...
    ) : Parcelable
    

    名字可以随便去,最终序列化后的名字就是name后面所对应的值。

    总结

    第一次正儿八经写博客,还有待研究学习和提升,下回有问题见。
    大佬给点赞鼓鼓力。

    展开全文
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
  • Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...
  • 12、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展从.java改为.jad。 60 13、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类...
  • 这个属性名乱码,如果设置成中文就报错 eg: feature.setAttribute("图斑编码", polygon.getCode()); ``` package com.kero99.utils; /** * 创建shape文件 * @author ygc * */ import java.io....
  • Javashop开发规范V2.2

    2012-08-21 00:13:09
    规则为:实体中的属性名和数据库表的字段名相同,如: 对应的数据库字段: 2.4 注解的使用 2.4.1 @NotDbField 在某个实体Bean中,我们可能会有一些属性不对应数据库字段,这时我们需要在相应的 Geter方法中...
  • Util集合提供一些基本对象的使用方法供方便COPY,如对应的CRUD SQL语句、setMap、getMap、get属性等等 关于类名注释,可根据comment=(mysql)或者comment on table(pgsql/oracle)生成 可设置是否自动引包(java中的...
  •  可能遇到的问题有,在数据交互过程中,出现由于属性名的差距导致的数据交互失败。由于Css属性设置的问题,导致界面不完整等等。设计的算法都是自己编写的,可能存在不是最优算法的情况。 二、设计正文 1 需求...
  • Reason :跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。 ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能...
  • 9.2.1 SecurityContextHolder,SecurityContext和认证对象 74 获取有关当前用户的信息 75 9.2.2 UserDetailsService 75 9.2.3授予权力 77 9.2.4总结 77 9.3认证 78 9.3.1什么是Spring Security中的认证? 78 9.3.2...
  • 的时候 会报:“Microsoft JScript 运行时错误: 对象不支持此属性或方法”的错误 为什么呢?想不通 如果把TreeEditor 定义到"修改昵称"中就不会抱错 //用于智能提示显示 /// function ShowQQMenu(node,e,UserID...
  • 属性 - 类属性 / 实例属性 / 属性访问器 / 属性修改器 / 属性删除器 / 使用__slots__ 类中的方法 - 实例方法 / 类方法 / 静态方法 运算符重载 - __add__ / __sub__ / __or__ /__getitem__ / __setitem__ / __len__ /...
  • 其实那样并不好,一方面,虽说常用的控件就那么几个但每个控件的属性可是一大堆的,直接写代码容易漏掉某个属性;另一方面,通过Design可视化进行布局,能够获得及时反馈,而且一拖即成会感觉很爽。 所以推荐大家...
  • [code="java"] <td colspan="2"><b>上传附件</b></td> ;">添加附件: <td><a href="javascript:void(0);" class="files" id="idFile"></a> ;" src="../../images/upload/loading.gif" ...
  • 以大家都熟悉的登录操作为例:三个文件LoginActivty.java、LoginViewModel.java、activity_login.xml 2.1.1、关联ViewModel 在activity_login.xml中关联LoginViewModel。 <layout> <data> <...
  • 每次实例化只增加私有的对象属性(或方法)到实例中,所有实例的公有属性(或方法)指向同一个内存地址</li></ol> <pre><code> javascript var Person = function(name, age) { ...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    2.8 秘诀:使用Instruments监视缓存对象的内存分配 48 2.9 使用Clang静态分析器 50 2.10 针对iPhone进行构建 51 2.10.1 安装开发配置 51 2.10.2 编辑应用程序标识符 51 2.10.3 设置Code Signing Identity 52 ...
  • <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置...
  • Android 上百实例源码分析以及开源分析 集合打包4

    千次下载 热门讨论 2012-07-10 21:54:03
    2、 进入开发设置,运行模拟器,安装JChat文件(可通过命令adb install <PATH_TO_APK>\jChat.apk),运行JADE平台(可通过命令java -cp <PATH_TO_JADE_LEAP_JAR>\JadeLeap.jar -Djade_domain_df_autocleanup=true ...
  • 前后端分离:axios、json 前端技术栈、技术架构:Vue、node.js 前置知识: 了解 Vue 组件之前的知识 对 springboot + mybatis 较熟悉 开发流程: 需求分析 库表设计 编码(项目环境搭建+编码) 项目调试 项目...
  • 排行榜、树洞 OCR 文字识别 、从包含表格的扫描图片中识别表格和文字、语声迁移、Python口语自然语言处理工具集(英文)、 similarity:相似度计算工具包,java编写、海量中文预训练ALBERT模型 、Transformers 2.0 、...
  • 还会生成一个为 packageIndex 的 json 文件,即记录所有相关离线包信息集合的文件,该文件主要是提供给客户端下载的。大致内容如下: <pre><code> { "data": [ { "module_name&#...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
热门标签
关键字:

java修改json对象属性名

java 订阅