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

Java:JSONObject.toString()-在冒号后面添加额外的空格(";:";->;:";),java,space,tostring,jsonobject,colon,Java,Space,Tostring,Jsonobject,Colon,谷歌搜索了一段时间,但没有发现任何有用的东西,因为关键词太常见了 目前,在我的Java代码方法toString()(在一些JSONObject对象上调用)中,生成如下输出: {"key_name":<numerical_value>} {“密钥名称”: 而我需要的(由于项目另一端的解析器不完善的事实)是: {“密钥名称”: 唯一的区别是冒号后面有额外的空格。有什么JSONObject内置的方法吗?或者我需要一些手写的简单字符串操作吗?使用下面的代码。它将帮助你解决这个问题 p

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

目前,在我的Java代码方法
toString()
(在一些
JSONObject
对象上调用)中,生成如下输出:

{"key_name":<numerical_value>}
{“密钥名称”:
而我需要的(由于项目另一端的解析器不完善的事实)是:

{“密钥名称”:

唯一的区别是冒号后面有额外的空格。有什么
JSONObject
内置的方法吗?或者我需要一些手写的简单字符串操作吗?

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

 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;
        }

    }
package com.javamad.utils;
导入java.io.IOException;
导入org.apache.log4j.Logger;
导入org.codehaus.jackson.jsongGenerationException;
导入org.codehaus.jackson.JsonParseException;
导入org.codehaus.jackson.map.JsonMappingException;
导入org.codehaus.jackson.map.ObjectMapper;
公共类JsonUtils{
私有静态记录器Logger=Logger.getLogger(JsonUtils.class.getName());
公共静态T jsonToJavaObject(字符串jsonRequest,类valueType)
抛出JsonParseException、JsonMappingException、IOException{
ObjectMapper ObjectMapper=新的ObjectMapper();
objectMapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.UNWRAP\u ROOT\u值,false);
T finalJavaRequest=objectMapper.readValue(jsonRequest,valueType);
返回最终请求;
}
公共静态字符串javaToJson(对象o){
字符串jsonString=null;
试一试{
ObjectMapper ObjectMapper=新的ObjectMapper();
objectMapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.UNWRAP_ROOT_VALUE,true);
jsonString=objectMapper.writeValueAsString(o);
}捕获(JsonGenerationException e){
错误(e);
}捕获(JsonMappingException e){
错误(e);
}捕获(IOE异常){
错误(e);
}
返回jsonString;
}
}

我只能想象构建一个定制的
JSONStringer
。事实上,它可能是使用
StringWriter
构建的
JSONWriter
。然后重写所有
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
//...
}

您好,您可以使用ObjectMapper类来解决此问题。toString()不是解决问题的正确方法。为什么?我需要的正是一根绳子。这只是另一个远程应用程序对其进行解析的问题。我的应用程序生成JSONObject并将其作为json格式的字符串传输——这是一些其他方提出并同意的协议。虽然这可能可行,但真正的解决方案当然是在另一端修复解析器。您的JSONObject占用了额外的空间,如果您认为这是唯一的问题,请删除额外的空间。我觉得您应该使用ObjectMapper将java对象转换为json,无需再次生成JSONObject。@Henry-完全正确,这是我们的第一个解决方案,也是唯一正确的解决方案。可悲的是,目前还无法实现这一目标,因此我们必须找到一种方法来解决这一问题,而不是回答我的问题。我需要的是一个使用JSONObject的漂亮解决方案——如果有漂亮的解决方案的话。仍在寻求帮助。
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
//...
}