package com.genersoft.iot.vmp.utils; 
 | 
  
 | 
import com.fasterxml.jackson.databind.DeserializationFeature; 
 | 
import com.fasterxml.jackson.databind.JsonNode; 
 | 
import com.fasterxml.jackson.databind.ObjectMapper; 
 | 
import com.fasterxml.jackson.databind.node.ObjectNode; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.slf4j.Logger; 
 | 
import org.slf4j.LoggerFactory; 
 | 
  
 | 
import java.util.Iterator; 
 | 
import java.util.Map; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * @author gaofuwang 
 | 
 * @version 1.0 
 | 
 * @date 2022/3/11 10:17 
 | 
 */ 
 | 
public class UJson { 
 | 
  
 | 
    private static Logger logger = LoggerFactory.getLogger(UJson.class); 
 | 
    public static final ObjectMapper JSON_MAPPER = new ObjectMapper(); 
 | 
  
 | 
    static { 
 | 
        JSON_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); 
 | 
    } 
 | 
  
 | 
    private ObjectNode node; 
 | 
  
 | 
    public UJson(){ 
 | 
        this.node = JSON_MAPPER.createObjectNode(); 
 | 
    } 
 | 
  
 | 
    public UJson(String json){ 
 | 
        if(StringUtils.isBlank(json)){ 
 | 
            this.node = JSON_MAPPER.createObjectNode(); 
 | 
        }else{ 
 | 
            try { 
 | 
                this.node = JSON_MAPPER.readValue(json, ObjectNode.class); 
 | 
            }catch (Exception e){ 
 | 
                logger.error(e.getMessage(), e); 
 | 
                this.node = JSON_MAPPER.createObjectNode(); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public UJson(ObjectNode node){ 
 | 
        this.node = node; 
 | 
    } 
 | 
  
 | 
    public String asText(String key){ 
 | 
        JsonNode jsonNode = node.get(key); 
 | 
        if(Objects.isNull(jsonNode)){ 
 | 
            return ""; 
 | 
        } 
 | 
        return jsonNode.asText(); 
 | 
    } 
 | 
  
 | 
    public String asText(String key, String defaultVal){ 
 | 
        JsonNode jsonNode = node.get(key); 
 | 
        if(Objects.isNull(jsonNode)){ 
 | 
            return ""; 
 | 
        } 
 | 
        return jsonNode.asText(defaultVal); 
 | 
    } 
 | 
  
 | 
    public UJson put(String key, String value){ 
 | 
        this.node.put(key, value); 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    public UJson put(String key, Integer value){ 
 | 
        this.node.put(key, value); 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    public static UJson json(){ 
 | 
        return new UJson(); 
 | 
    } 
 | 
  
 | 
    public static UJson json(String json){ 
 | 
        return new UJson(json); 
 | 
    } 
 | 
  
 | 
    public static <T> T readJson(String json, Class<T> clazz){ 
 | 
        if(StringUtils.isBlank(json)){ 
 | 
            return null; 
 | 
        } 
 | 
        try { 
 | 
            return JSON_MAPPER.readValue(json, clazz); 
 | 
        }catch (Exception e){ 
 | 
            logger.error(e.getMessage(), e); 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static String writeJson(Object object) { 
 | 
        try{ 
 | 
            return JSON_MAPPER.writeValueAsString(object); 
 | 
        }catch (Exception e){ 
 | 
            logger.error(e.getMessage(), e); 
 | 
            return ""; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public String toString() { 
 | 
        return node.toString(); 
 | 
    } 
 | 
  
 | 
    public int asInt(String key, int defValue) { 
 | 
        JsonNode jsonNode = this.node.get(key); 
 | 
        if(Objects.isNull(jsonNode)){ 
 | 
            return defValue; 
 | 
        } 
 | 
        return jsonNode.asInt(defValue); 
 | 
    } 
 | 
  
 | 
    public UJson getSon(String key) { 
 | 
        JsonNode sonNode = this.node.get(key); 
 | 
        if(Objects.isNull(sonNode)){ 
 | 
            return new UJson(); 
 | 
        } 
 | 
        return new UJson((ObjectNode) sonNode); 
 | 
    } 
 | 
  
 | 
    public UJson set(String key, ObjectNode sonNode) { 
 | 
        this.node.set(key, sonNode); 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    public UJson set(String key, UJson sonNode) { 
 | 
        this.node.set(key, sonNode.node); 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    public Iterator<Map.Entry<String, JsonNode>> fields() { 
 | 
        return this.node.fields(); 
 | 
    } 
 | 
  
 | 
    public ObjectNode getNode() { 
 | 
        return this.node; 
 | 
    } 
 | 
  
 | 
    public UJson setAll(UJson json) { 
 | 
        this.node.setAll(json.node); 
 | 
        return this; 
 | 
    } 
 | 
} 
 |