ali fastjson的使用,parseObject问题,输出下划线格式等

使用过程

pom.xml中添加:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

代码:

public class JsonTest {
    public static void main(String[] args) {
        Map<Integer, Object> map = new HashMap<Integer,Object>();
        ArrayList<Person> list = new ArrayList<Person>();
        Person person = new JsonTest().new Person();
        Person person2 = new JsonTest().new Person();
        person.setName("张飞");
        person.setAge("28");
        person2.setName("guanyu");
        person2.setAge("30");
        list.add(person);
        list.add(person2);
        map.put(1, "String1");
        map.put(2, "String2");
        map.put(3, list);

        String jsonString = JSON.toJSONString(map);
        System.out.println(jsonString);
        JSONObject jsonObject = JSON.parseObject(jsonString);
        String string1 = jsonObject.getString("1");
        String string2 = jsonObject.getString("2");
        JSONArray list1 = jsonObject.getJSONArray("3");
        System.out.println(list1);
        System.out.println(list1.get(0));
    }

    class Person{
        private String name;
        private String age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAge() {
            return age;
        }

        public void setAge(String age) {
            this.age = age;
        }
    }
}

**对象 ==> jsonString **

JSON.toJSONString(map);

**jsonString ==> obj **

JSON.parseObject(jsonString);

当然也可以转换为某个类的对象,代码:

@Data
@Entity
public class Person {
    private static final Logger logger = LoggerFactory.getLogger(Person.class);
    @Id
    private Long id;
    private String name;

    public static void main(String[] args) {
        Person person = new Person();
        person.setId(159L);
        person.setName("chushiyun");
        String s = JSON.toJSONString(person);
        logger.info("json 字符串是:{}",s);
        
        Person person1 = JSON.parseObject(s, Person.class);
        logger.info(person1.toString());
    }
}

如果字段有不一致的时候,那么可以加@JSONField注解,序列化和解析的时候就会按照这个字段来解析,如代码:

@Data
@Entity
public class PersonManage {
    @Id
    private Long id;
    @JSONField(name="name")
    private String manageName;
}

拓展: JSON.parseObject一个空对象会报错吗?

好问题,一起来看一下。
JSON.parseObject一个空对象会报错吗?(null);
不会。
但是要注意,返回的是个null对象,如果继续调用方法,会报错。

用代码验证下:

// 这句不会报错
JSONObject jsonObject = JSON.parseObject(null);
// 这句会报错
// 因为之前返回的JsonObject是null,调用任何方法都会报错
String string = jsonObject.getString("username");

如果是Resource资源,使用Json序列化容易有问题

序列化之后,发现文件变成非正常文件了。
代码:

Path path = Paths.get("d:\\", filename);
Resource resource = resourceLoader.getResource("file:" + path.toString());
logger.info("resource:{}",JSON.toJSONString(resource)); // 都是这句json惹的祸,页面输出不了

目前还不知道原理,总之,在序列化Resource资源的时候要小心。

parseObject遇到的问题

解析复杂对象的时候直接使用parseObject会有问题,要用这种解析方式:

JsonResult<MultiModel> redisJsonResult = JSON.parseObject(jsonString, new TypeReference<JsonResult<MultiModel>>() {});

输出下划线格式

标准产品是下划线格式,日志也打印为下划线格式直接就能复用,否则还需要转您换。

public static void main(String[] args) {
    SerializeConfig serializeConfig=new SerializeConfig();
    serializeConfig.propertyNamingStrategy= PropertyNamingStrategy.SnakeCase;
    User user= new User ();
    user.setUsername("asdfad");
    log.info(JSON.toJSONString(user,serializeConfig));

}

发现果然是下划线格式了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 您可以使用Fastjson自带的SerializerFeature.PrettyFormat来实现格式输出。示例代码如下: ``` java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; public class Test { public static void main(String[] args) { String jsonString = "{\"name\":\"Tom\",\"age\":20,\"gender\":\"male\"}"; // 格式输出 String prettyJsonString = JSON.toJSONString(JSON.parseObject(jsonString), SerializerFeature.PrettyFormat); System.out.println(prettyJsonString); } } ``` 输出结果: ``` { "age": 20, "gender": "male", "name": "Tom" } ``` ### 回答2: Fastjson是一种用于处理JSON数据的Java库。它提供了多种功能,其中之一是将JSON格式输出打印。下面是使用Fastjson格式输出打印的示例: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class FastjsonExample { public static void main(String[] args) { // 创建一个JSON对象 JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "John"); jsonObject.put("age", 25); jsonObject.put("gender", "male"); // 使用Fastjson进行格式输出打印 String formattedOutput = JSON.toJSONString(jsonObject, true); System.out.println(formattedOutput); } } ``` 上述代码中,首先创建了一个JSON对象`jsonObject`,其中包含了`name`、`age`和`gender`三个属性。然后使用`JSON.toJSONString()`方法将`jsonObject`格式化为字符串形式,并传入第二个参数`true`表示进行格式化。最后通过`System.out.println()`方法输出格式化后的字符串。 运行上述代码,将得到以下输出结果: ``` { "age": 25, "gender": "male", "name": "John" } ``` 可以看到,JSON对象被格式输出,并使用了缩进和换行符,以使其更易读。 需要注意的是,Fastjson还提供了很多其他功能,如将Java对象转换为JSON字符串、将JSON字符串解析为Java对象等。以上仅是有关Fastjson格式输出打印的简单示例。 ### 回答3: fastjson2是一个高效的Java JSON处理库,用于解析和生成JSON数据。它可以将Java对象转换为JSON字符串,也可以将JSON字符串转换为Java对象。在使用fastjson2库时,我们可以使用格式输出来打印JSON数据。 格式输出功能可以使得JSON数据更加易读和美观。通过设置相应的格式化参数,我们可以将JSON数据按照一定的缩进和换行规则进行输出。这样,在开发和调试过程中,我们可以更清晰地查看JSON数据的结构和内容。 我们可以通过以下步骤来实现fastjson2的格式输出打印: 1. 导入fastjson2库的相关依赖。可以在项目的pom.xml文件中添加fastjson2的依赖项,或者手动将fastjson2的jar包添加到项目的类路径中。 2. 创建一个Java对象,并将其转换为JSON字符串。可以使用fastjson2提供的JSONObject或者JSONArray类来创建JSON对象或者数组。 3. 使用JSON.toJSONString方法将Java对象转换为格式化后的JSON字符串。在该方法中,我们可以通过设置SerializerFeature.PrettyFormat参数来开启格式输出功能。 4. 打印格式化后的JSON字符串。可以使用System.out.println或者其他打印方法将格式化后的JSON字符串输出到控制台或者日志文件中。 以下是一个示例代码片段,展示了如何使用fastjson2进行格式输出打印: ``` import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; public class FastJsonDemo { public static void main(String[] args) { // 创建一个JSON对象 JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "张三"); jsonObject.put("age", 20); // 将JSON对象转换为格式化后的JSON字符串 String jsonString = JSON.toJSONString(jsonObject, SerializerFeature.PrettyFormat); // 打印格式化后的JSON字符串 System.out.println(jsonString); } } ``` 运行上述代码,输出JSON字符串会按照一定的缩进和换行规则进行格式化,以便于阅读和理解。 总之,通过使用fastjson2库的格式输出功能,可以使得JSON数据更加易读和美观,方便开发和调试工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值