Java: JSONObject.toString() - 在冒号后添加额外的 space (":" -> ": ")
Java: JSONObject.toString() - adding extra space after colon (":" -> ": ")
谷歌搜索了一段时间,但没有找到任何有用的东西,因为关键字太常见了。
目前在我的 Java 代码方法中 toString()
(在某些 JSONObject
对象上调用)产生如下输出:
{"key_name":<numerical_value>}
而我需要的(由于项目另一端的解析器不完善)是:
{"key_name": <numerical_value>}
唯一的区别是在冒号后面多了一个space。是否有任何 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;
}
}
我只能想象构建自定义 JSONStringer
。事实上,它可能是使用 StringWriter
构建的 JSONWriter
。然后在调用父 class 方法之前覆盖所有 value
方法以添加 space。
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
//...
}
谷歌搜索了一段时间,但没有找到任何有用的东西,因为关键字太常见了。
目前在我的 Java 代码方法中 toString()
(在某些 JSONObject
对象上调用)产生如下输出:
{"key_name":<numerical_value>}
而我需要的(由于项目另一端的解析器不完善)是:
{"key_name": <numerical_value>}
唯一的区别是在冒号后面多了一个space。是否有任何 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;
}
}
我只能想象构建自定义 JSONStringer
。事实上,它可能是使用 StringWriter
构建的 JSONWriter
。然后在调用父 class 方法之前覆盖所有 value
方法以添加 space。
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
//...
}