1 访问"com.alibaba.fastjson.JSON"的静态成员"parseObject".
产生问题的代码:
import com.alibaba.fastjson.JSONObject;
JSONObject question = JSONObject.parseObject(personJsonStr);
原因: 不应通过派生类型访问 “static” 基类成员。为了代码清晰起见,永远不要使用派生类型的名称访问 base 类的 static 成员。 这样做很容易造成混淆,并且可能会导致存在两个不同的静态成员的错觉。
2 解决方案
解决方案1: 使用基类访问parseObject方法
import com.alibaba.fastjson.JSONObject;
JSONObject result1 = JSON.parseObject(personJsonStr);
解决方案2: 使用其他包解析Json
import net.sf.json.JSONObject;
JSONObject result2 = JSONObject.fromObject(personJsonStr);
3 完整示例
这个完整示例由两个文件组成:Person.java和Test.java文件,并且使用到了两个依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
</dependency>
代码清单:
- Person.java
- Test.java
1 Person.java
import lombok.Data;
@Data
public class Person {
private String name;
private String sex;
private Integer age;
Person(String name, String sex, Integer age) {
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
2 Test.java
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSON;
public class Test {
public static void main(String[] args) {
Person person = new Person("yizhaofengyue", "male", 22);
JSONObject personJsonObj = new JSONObject();
personJsonObj.put("name", "yizhaofengyue");
personJsonObj.put("sex", "male");
personJsonObj.put("age", 22);
String personJsonStr = "{\"name\":\"yizhaofengyue\",\"sex\":\"male\",\"age\":22}";
System.out.print("JavaObj:");
System.out.println(person);
System.out.print("JSON:");
System.out.println(personJsonObj.toJSONString());
System.out.print("JSONString:");
System.out.println(personJsonStr);
// 问题
System.out.println("-----------------问题-------------------");
JSONObject question = JSONObject.parseObject(personJsonStr);
System.out.println(question.toJSONString());
// 解决方案1:
System.out.println("-----------------解决方案1-------------------");
JSONObject result1 = JSON.parseObject(personJsonStr);
System.out.println(result1.toJSONString());
// 解决方案2:
System.out.println("-----------------解决方案2-------------------");
net.sf.json.JSONObject result2 = net.sf.json.JSONObject.fromObject(personJsonStr);
System.out.println(result2.toString());
// 其他相关操作
// Java对象转Json字符串
System.out.println("-----------------其他操作-------------------");
net.sf.json.JSONObject result3 = net.sf.json.JSONObject.fromObject(person);
System.out.println(result3.toString());
System.out.println("============================================");
}
}