java對象和json字符串的相互轉換


可以直接看最后面的第二種方式更簡單一點。

1.先導入該依賴,一般使用這一個就行了

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.0</version>
</dependency>

2.以下都是測試代碼,注釋都寫在代碼中了,自行理解,redis部分替換成對應的字符串即可。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class MyTest {

    @Autowired
    private StringRedisTemplate redisTemplate;

    //存入字符串
    @Test
    public void test01() {
        String name = "zhangmeili";
        redisTemplate.opsForValue().set("name", name);
    }

    //對象轉成json字符串存入redis
    @Test
    public void test02() throws JsonProcessingException {
        User u = new User(1001, "張三豐", "男", 20);
        //{"id":"1001","name":"張三豐",,,,,}
        ObjectMapper obj = new ObjectMapper();
        String json = obj.writeValueAsString(u);
        redisTemplate.opsForValue().set("user", json);
    }

    //多個對象集合===>Json字符串
    @Test
    public void test03() throws JsonProcessingException {
        User u1 = new User(1001, "張三豐", "男", 21);
        User u2 = new User(1002, "張五豐", "男", 22);
        User u3 = new User(1003, "張六豐", "男", 23);
        User u4 = new User(1004, "張七豐", "男", 24);
        List<User> list = Arrays.asList(u1, u2, u3, u4);

        ObjectMapper obj = new ObjectMapper();
        String json = obj.writeValueAsString(list);
        //[{},{},{}]
        redisTemplate.opsForValue().set("users", json);
    }


    //獲取字符串
    @Test
    public void test04() {
        String name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }

    //redis中的json字符串====>一個對象
    @Test
    public void test05() throws IOException {
        String json = redisTemplate.opsForValue().get("user");
        ObjectMapper obj = new ObjectMapper();
        User user = obj.readValue(json, User.class);
        System.out.println(user);
    }

    //redis中的json字符串====>多個對象list集合
    @Test
    public void test06() throws IOException {
        String json = redisTemplate.opsForValue().get("users");
        ObjectMapper obj = new ObjectMapper();
        List<User> users = obj.readValue(json, 
                obj.getTypeFactory().constructCollectionType(List.class, User.class));
        System.out.println(users);;
    }

    //存入一個Map對象轉成json字符串
    @Test
    public void test07() throws JsonProcessingException {
        Map<String,String> map = new HashMap<>();
        map.put("location", "上海");
        map.put("date", "2019-12-24");
        map.put("department","宣傳部");

        ObjectMapper obj = new ObjectMapper();
        String json = obj.writeValueAsString(map);
        //{"location":"上海","name":"張三豐",,,,,}
        redisTemplate.opsForValue().set("map",json, 100, TimeUnit.MINUTES);

    }

    //獲取一個json字符串=====>map集合
    @Test
    public void test08() throws IOException {
        ObjectMapper obj = new ObjectMapper();

        String json = redisTemplate.opsForValue().get("map");
        Map<String, String> map = obj.readValue(json, 
                obj.getTypeFactory().constructMapType(Map.class, String.class, String.class));
        System.out.println(map);
    }

//  JsonNode jsonNode = objectMapper.readTree(s);
//  if (!"0000".equals(jsonNode.get("code").asText())) {
//   throw new RuntimeException(jsonNode.get("data").asText());
//  }
//  LoginUser loginUser = objectMapper.treeToValue(jsonNode, LoginUser.class);

}

 ============================================

貌似使用阿里巴巴的fastjson更簡單點:

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

然后使用JSONObject的眾多方法,這里就放幾個簡單的,用法很簡單

        //把字符串轉換為json類型
        JSONObject jsonObject = JSONObject.parseObject("xxx");
        Object o = jsonObject.get("xxx");
        
        //把對象轉成json格式的字符串
        String s1 = JSONObject.toJSONString(map);        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM