将JsonObject转换为字符串

117
{
    "data": 
    {
        "map":
        {
            "allowNestedValues": true,
            "create": "2012-12-11 15:16:13",
            "title": "test201212110004",
            "transitions": []
        }
    },
    "msg": "success",
    "code": "0"
}
上面是一个 JsonObject,其中 data 是一个 JsonObject
如何将其转换为类似于 "msg":"success"String,你知道,我无法直接在 data 的值外添加双引号。

3
我不太理解...你能否换一种说法,并提供(即使是无法运行的)代码片段来说明你试图做什么? - sp00m
4
JsonObject.getString("msg"); 翻译为:获取 JsonObject 中名为 "msg" 的字符串。 - string.Empty
如果您需要添加双引号,可以使用反斜杠 \"。请提出您的问题! - Benjamin Schwalb
1
那是 org.json.JSONObject 的实例吗?如果是的话,你可以简单地调用 JSONObjecttoString() 方法来获取 JSONObject 的 JSON 文本。 - Stanley
3
似乎在这里登陆的人三年后发现有用的东西与所问的问题根本不相关。看起来这个问题已经过了澄清的帮助期限。我相信最初的问题是@JayZhang想要展平对象,使数据成为内部json值的字符串表示形式。似乎没有人回答如何做到这一点。数年后这样做对他人来说不太可能有任何价值。人们正在搜索将json转换为字符串,并陷入一个混乱的Q&A会话中,最好将其删除。 - dlamblin
显示剩余2条评论
15个回答

213
有一个内置的方法可以将JSONObject转换为String。为什么不使用它呢?
JSONObject json = new JSONObject();

json.toString();

{ "data": "{ "map": { "allowNestedValues": true, "pdId": 168543, "source": "" } }", "msg": "操作成功", "code": "0" } - Jay Zhang
4
我在响应字符串中得到了反斜杠。如何在不得到反斜杠的情况下转换JSON对象。 - Onkar Musale
@Onkar,请分享您的字符串示例以及代码片段。 - Tanu Garg
类似于这个线程,但是找不到答案。https://dev59.com/qWQn5IYBdhLWcg3wzZtU - Onkar Musale
{"date":"2013/5/15"}。你是否使用import org.json.JSONObject;,对我来说这很正常。请分享你的精确样例。 JSONObject json = new JSONObject(); try { json.put("date", "2013/5/15"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(json.toString()); - Tanu Garg
Java EE的JsonObject也是一样的吗? - dko

25

您可以使用:

JSONObject jsonObject = new JSONObject();
jsonObject.toString();

如果您想获取特定的值,可以使用:

jsonObject.getString("msg");

或整数值

jsonObject.getInt("codeNum");

对于长整数

jsonObject.getLong("longNum");

1
最好使用 jsonObject.optString("msg") 和 jsonObject.optInt("codeNum"),因为如果您使用 getString() 或 getInt(),并且 msg 或 codeNum 的值为 null,则会抛出错误并停止程序。我提到的方法唯一的区别是,如果这些值为 null,它们不会抛出错误。 - User1

9
您可以使用。
JsonObject.getString("msg"); 

5
您可以尝试使用Gson转换器,以获得与json.stringify相同的精确转换。
val jsonString:String = jsonObject.toString()
val gson:Gson = GsonBuilder().setPrettyPrinting().create()
val json:JsonElement = gson.fromJson(jsonString,JsonElement.class)
val jsonInString:String= gson.toJson(json)
println(jsonInString)

4

JsonObject似乎是JSON-P API,如果是这样的话,我会使用JsonWritter将JsonValue写入StringWriter:

    JsonObjectBuilder pokemonBuilder = Json.createObjectBuilder();
    pokemonBuilder.add("name", "Pikachu");
    pokemonBuilder.add("type", "electric");
    pokemonBuilder.add("cp", 827);
    pokemonBuilder.add("evolve", true);
    JsonObject pokemon = pokemonBuilder.build();
    StringWriter sw = new StringWriter(128);
    try (JsonWriter jw = Json.createWriter(sw)) {
        jw.write(pokemon);
    }
    String pokemonStr = sw.toString();

3
在括号外添加双引号,并用\"替换 {} 内部的双引号

所以:"{\"data\":{..... }"


2
使用这个:
JSONObject json = new JSONObject();
JSONObject.valueToString(json.toString());

4
JsonObjectJSONObject,意思是两者不相等。 - Elikill58

1

模型示例

public class Person {
    private String name;
    private String age;
// setter and getter
// toString method
}

Service方法示例

public String getPerson() {
        JSONObject returnObj = new JSONObject();
        Person person = new Person();
        person.setAge("24");
        person.setName("Fazal");
        returnObj.put("age", person.getAge());
        returnObj.put("name", person.getName());
        return returnObj.toString();
    }

需要Java中的Json依赖

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>{New_Version}</version>
</dependency>

你将会得到这样的JSON结果 enter image description here

0
JSONObject data = (JSONObject) data.get("map"); 
 //for example
String jsonString = data.toJSONString();

0

只需使用ObjectMapper

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
//here more config opts...
Car car = new Car("yellow", "renault");
objectMapper.writeValue(new File("target/car.json"), car);
String carAsString = objectMapper.writeValueAsString(car);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接