使用org.json包,new JSONObject(Object obj)后,obj信息在生成的json对象(json字符串)中消失一部分(不完整)

从JSONObject源码注释知:obj应该是一个Bean,其类型必须为public的class,将obj的实际类型【Object的子类,即EventType】改为public的类型后,信息保存完整,问题解决。

 

JSONObject部分源码如下(看注释):

/**
     * Construct a JSONObject from an Object using bean getters. It reflects on
     * all of the public methods of the object. For each of the methods with no
     * parameters and a name starting with <code>"get"</code> or
     * <code>"is"</code> followed by an uppercase letter, the method is invoked,
     * and a key and the value returned from the getter method are put into the
     * new JSONObject.
     *
     * The key is formed by removing the <code>"get"</code> or <code>"is"</code>
     * prefix. If the second remaining character is not upper case, then the
     * first character is converted to lower case.
     *
     * For example, if an object has a method named <code>"getName"</code>, and
     * if the result of calling <code>object.getName()</code> is
     * <code>"Larry Fine"</code>, then the JSONObject will contain
     * <code>"name": "Larry Fine"</code>.
     *
     * @param bean
     *            An object that has getter methods that should be used to make
     *            a JSONObject.
     */
    public JSONObject(Object bean) {
        this();
        this.populateMap(bean);
    }




附录:摘自百度

javaBean的使用规则

1.一个javabean类必须是一个公共类。 2.一个javabean类必须有一个空的构造函数。 3.一个javabean类不应有公共实力变量。 4.持有值应该通过一组存取方法(getXXX和setXXX)必须来访问(如果在使用boolean类型的变量时,用户可以用is代替get();和set();). ... 1.一个javabean类必须是一个公共类。
2.一个javabean类必须有一个空的构造函数。
3.一个javabean类不应有公共实力变量。
4.持有值应该通过一组存取方法(getXXX和setXXX)必须来访问(如果在使用boolean类型的变量时,用户可以用is代替get();和set();).
请大家给我一个javabean例子,要求javabean的规范格式要符合上面4点的要求。
谢谢!
展开
在请加上注释//
谢谢。
LZ2199413 | 浏览 5166 次
推荐于2016-08-28 03:41:39 最佳答案
(1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public  ,如: public class user{......}
(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器
(3)一个javaBean类不应有公共实例变量,类变量都为private  ,如: private int id;
(4)属性应该通过一组存取方法(getXxx 和 setXxx)来访问,一般是IDE(Eclipse、JBuilder) 为属性生成getter/setter 方法
一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。
但是,还有一些特殊情况:
1、如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是getuName/setuName。
2、如果前两个字母是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是getURL/setURL。
3、如果首字母大写,也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name。
所以在JavaBean命名时应该注意符合以上命名规范。
附下表,看看吧:
属性名/类型                    |                       getter 方法              |                    setter 方法  
xcoordinate/Double     | public Double getXcoordinate()     | public void setXcoordinate(Double newValue)

xCoordinate/Double    | public Double getxCoordinate()     |public void setxCoordinate(Double newValue)

XCoordinate/Double    |public Double getXCoordinate()     | public void setXCoordinate(Double newValue)

Xcoordinate/Double     |不允许                                             |    不允许
### 回答1: Org.json.JSONObject类有以下构造方法: 1. JSONObject():创建一个空的JSONObject对象。 2. JSONObject(JSONObject obj):根据传入的JSONObject对象创建一个新的JSONObject对象,两者具有相同的内容。 3. JSONObject(Map<?, ?> map):根据传入的Map对象创建一个新的JSONObject对象,map的key必须为String类型,value可以是任意类型。 4. JSONObject(Object bean):根据传入的JavaBean对象创建一个新的JSONObject对象,该对象的所有属性都将被转换为JSONObject的键值对。 5. JSONObject(String source):根据传入的JSON字符串创建一个新的JSONObject对象。 6. JSONObject(JSONTokener x):根据传入的JSONTokener对象创建一个新的JSONObject对象JSONTokener对象用于解析JSON字符串。 7. JSONObject(Collection<?> collection):根据传入的Collection对象创建一个新的JSONObject对象,collection的元素必须是JavaBean对象,该对象的所有属性都将被转换为JSONObject的键值对。 以上是Org.json.JSONObject的所有构造方法。 ### 回答2: Org.json.JSONObject类是Java语言的一个类库,用于处理JSON数据。它提供了多个构造方法,用于创建JSONObject对象。下面是列举的所有构造方法: 1. `JSONObject()` 没有参数的构造方法,用于创建一个空的JSONObject对象。 2. `JSONObject(String json)` 接收一个JSON格式的字符串作为参数,用于将JSON字符串转换为JSONObject对象。 3. `JSONObject(Map<?, ?> map)` 接收一个Map对象作为参数,用于将Map对象转换为JSONObject对象。 注意:Map的key和value都必须是基本类型数据,不能是自定义对象。 4. `JSONObject(Object bean)` 接收一个JavaBean对象作为参数,用于将JavaBean对象转换为JSONObject对象。 注意:JavaBean对象的属性必须为公共的,并且具有对应的getter方法。 5. `JSONObject(JSONTokener x)` 接收一个JSONTokener对象作为参数,用于从JSONTokener对象解析出JSONObject对象。 6. `JSONObject(JSONObject jo, String[] names)` 接收一个JSONObject对象和一个字符串数组作为参数,用于从给定的names数组提取对应的键值对,并创建一个新的JSONObject对象。 注意:names数组字符串值为要提取的键,如果有键不存在,则在新的JSONObject对象对应的值为null。 7. `JSONObject(Object object, String[] names)` 接收一个自定义对象和一个字符串数组作为参数,用于从给定的names数组提取对应的属性值,并创建一个新的JSONObject对象。 注意:names数组字符串值为要提取的属性名,如果有属性不存在,则在新的JSONObject对象对应的值为null。 这些构造方法可以根据不同的参数类型,将不同格式的数据转换为JSONObject对象,并进行后续的JSON数据处理和操作。 ### 回答3: Org.json.JSONObject是一个用于解析和构建JSON对象的类,它提供了多个构造方法来创建不同类型的JSON对象。下面列举了Org.json.JSONObject的所有构造方法: 1. JSONObject() 创建一个空的JSON对象。 2. JSONObject(String json) 通过传入一个JSON字符串,创建一个对应的JSON对象。 3. JSONObject(Map<? extends String, ? extends Object> map) 通过传入一个Map对象,创建一个JSON对象。Map的键必须是字符串类型,值可以是任意类型的对象。 4. JSONObject(JSONObject json) 通过传入一个已有的JSON对象,创建一个新的JSON对象。这个构造方法可以用来进行JSON对象的深拷贝。 5. JSONObject(JSONTokener tokener) 通过传入一个JSONTokener对象,创建一个JSON对象JSONTokener是一个用于解析JSON文本的工具类。 6. JSONObject(Object bean) 通过传入一个Java Bean对象,创建一个JSON对象JSON对象的键会根据Java Bean的字段名自动生成,值将从相应的字段获取。 除了上述构造方法之外,还有一些辅助的静态方法可以用于创建JSON对象,例如: 1. JSONObject.wrap(Object value) 创建一个JSON对象,并将指定的值装为JSON对象。 2. JSONObject.NULL 创建一个表示null值的JSON对象。 以上就是Org.json.JSONObject的所有构造方法。开发者可以根据具体的需求选择合适的构造方法来创建JSON对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值