Java:JSONObject.toString() - 在冒号后添加额外的空格 (":" -> ": ")

问题描述 投票:0回答:3

谷歌搜索了一段时间但没有发现任何有用的东西,因为关键字太常见了。

目前在我的Java代码方法中

toString()
(调用一些
JSONObject
对象)产生这样的输出:

{"key_name":<numerical_value>}

而我需要的(由于项目另一端的解析器不完善)是:

{"key_name": <numerical_value>}

唯一的区别是冒号后面有额外的空间。是否有任何

JSONObject
内置的方式来做到这一点,或者我需要一些手写的简单字符串操作吗?

java json tostring
3个回答
2
投票

我只能想象建立一个自定义

JSONStringer
。事实上,它可能是使用
JSONWriter
构建的
StringWriter
。然后你覆盖所有
value
方法在调用父类方法之前添加一个空格。

class JSONSpaceStringer extends JSONWriter {
    private StringWriter sw;

    JSONSpaceStringer(StringWriter sw) {
        parent(sw); // initialize parent
        this.sw = sw;
    }

    @Override
    public JSONWriter value(long l) throws JSONException {
        sw.write(" "); // add an initial space
        parent.value(l); // and let parent class do the job...
    }

// same for all other value methods
//...
}

1
投票

使用下面的代码。它将帮助您解决问题。

 package com.javamad.utils;

    import java.io.IOException;

    import org.apache.log4j.Logger;
    import org.codehaus.jackson.JsonGenerationException;
    import org.codehaus.jackson.JsonParseException;
    import org.codehaus.jackson.map.JsonMappingException;
    import org.codehaus.jackson.map.ObjectMapper;

    public class JsonUtils {

        private static Logger logger = Logger.getLogger(JsonUtils.class.getName());


        public static <T> T jsonToJavaObject(String jsonRequest, Class<T> valueType)
                throws JsonParseException, JsonMappingException, IOException {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.UNWRAP_ROOT_VALUE,false);     
            T finalJavaRequest = objectMapper.readValue(jsonRequest, valueType);
            return finalJavaRequest;

        }

        public static String javaToJson(Object o) {
            String jsonString = null;
            try {
                ObjectMapper objectMapper = new ObjectMapper();
                objectMapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.UNWRAP_ROOT_VALUE,true);  
                jsonString = objectMapper.writeValueAsString(o);

            } catch (JsonGenerationException e) {
                logger.error(e);
            } catch (JsonMappingException e) {
                logger.error(e);
            } catch (IOException e) {
                logger.error(e);
            }
            return jsonString;
        }

    }

0
投票

只需扩展 MinimalPrettyPrinter

public class TestObjectMapper2 {
    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        Person person = mapper.readValue("{\"name\":\"frank\",\"age\":20,\"inq\":[\"2\",\"35\"]}",Person.class);
        System.out.println(mapper.writer(new MinimalPrettyPrinter(){
            @Override
            public void writeObjectEntrySeparator(JsonGenerator jg)
                throws IOException
            {
                jg.writeRaw(',');
                jg.writeRaw(' ');
            }

            @Override
            public void writeArrayValueSeparator(JsonGenerator jg)
            throws IOException
            {
                jg.writeRaw(',');
                jg.writeRaw(' ');
            }
        }).writeValueAsString(person));
    }

    private static class Person{
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                '}';
            }

            private String name;
            private Integer age;

            private List<String> inq;

            public List<String> getInq()
            {
                return inq;
            }

            public void setInq(List<String> inq)
            {
                this.inq = inq;
            }

            public String getName() {
                return name;
            }

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

            public Integer getAge() {
                return age;
            }

            public void setAge(Integer age) {
                this.age = age;
            }
        }
    }
output: {"name":"frank", "age":20, "inq":["2", "35"]}
© www.soinside.com 2019 - 2024. All rights reserved.