java - 来自 Gson : remove double quotes 的 JSON 字符串

标签 java json gson

这是我的 Json 代码示例:

array("id" => 0, "navn" => "Vind telefon", "udgiver" => "Telia", "beskrivelse" => utf8_encode("Vind en Iphone 5 ved at gætte 1 spørgsmål"), "tilmeldte" => 89, "startdate" => "10-04-2013", "enddate" => "30-06-2013"),

如果我在我的程序中打印出 navn 属性,我会得到以下输出:

"Vind Telefon"

如您所见,它保留了双引号。

有什么办法可以避免吗?

我的完整代码:

<?php
header('Content-Type: json; charset=utf-8');
$lottery = array(
    array("id" => 0, "navn" => "Vind telefon", "udgiver" => "Telia", "beskrivelse" => utf8_encode("Vind en Iphone 5 ved at gætte 1 spørgsmål"), "tilmeldte" => 89, "startdate" => "10-04-2013", "enddate" => "30-06-2013"),
    array("id" => 1, "navn" => "Fri taletid", "udgiver" => "Telmore", "beskrivelse" => utf8_encode("Vind et års forbrug af fri data og fri taletid"), "tilmeldte" => 701, "startdate" => "03-03-2013", "enddate" => "10-06-2013"),
    array("id" => 2, "navn" => "Vind 5000 kr.", "udgiver" => "Bilka", "beskrivelse" => utf8_encode("Vind et gavekort på 5000 kr til bilka."), "tilmeldte" => 101, "startdate" => "10-05-2013", "enddate" => "01-07-2013"),
    array("id" => 3, "navn" => "Fri vin", "udgiver" => "Føtex", "beskrivelse" => utf8_encode("Vind et års forbrug af vin"), "tilmeldte" => 391, "startdate" => "01-04-2013", "enddate" => "10-07-2013"),
    array("id" => 4, "navn" => "Vind et TV", "udgiver" => "El-giganten", "beskrivelse" => utf8_encode("Vind et 60\" LED tv til stuen"), "tilmeldte" => 22, "startdate" => "01-04-2013", "enddate" => "22-07-2013"),
    array("id" => 5, "navn" => "Vind en telefon", "udgiver" => "Samsung", "beskrivelse" => utf8_encode("Vind en Galaxy S4 4g telefon"), "tilmeldte" => 784, "startdate" => "10-04-2013", "enddate" => "30-07-2013"),
    array("id" => 6, "navn" => "Gratis Vand", "udgiver" => "Aqua D'or", "beskrivelse" => utf8_encode("Vind et helt års forbrug af vand og dansk vand"), "tilmeldte" => 345, "startdate" => "01-03-2013", "enddate" => "18-07-2013"),
    array("id" => 7, "navn" => "Fri Adwords", "udgiver" => "Google", "beskrivelse" => utf8_encode("Vind adwords kuponner til en værdi af 10.000"), "tilmeldte" => 22, "startdate" => "10-02-2013", "enddate" => "22-08-2013"),
    array("id" => 8, "navn" => "Morgenmads produkter", "udgiver" => "Kellogs", "beskrivelse" => utf8_encode("Vind et helt års forbrug af kellogs produkter"), "tilmeldte" => 111, "startdate" => "01-05-2013", "enddate" => "10-09-2013"),
    array("id" => 9, "navn" => utf8_encode("Vind tøj for 10.000"), "udgiver" => "Jack & Jones", "beskrivelse" => utf8_encode("Vind et gavekort til Jack & Jones på 10.000"), "tilmeldte" => 33, "startdate" => "03-05-2013", "enddate" => "01-10-2013"),
);
//id, navn, udgiver, beskrivelse, tilmeldte, startdate, slutdate
echo json_encode($lottery);
?>

打印出来的java代码:

        String discription = arrayListing.get(i).getAsJsonObject().get("beskrivelse").toString();
    System.out.println(discription);

我的完整 java 代码

    public static void main(String[] args) {
    String result = null;
    BufferedReader reader = null;
    try {
        URL url = new URL("http://www.marcrasmussen.dk/json.php");
        reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
        for (String line; (line = reader.readLine()) != null;) {
            System.out.println(line);
            result = line;
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                // Ignore
            }
        }
    }

    JsonElement root = new JsonParser().parse(result);


    HashMap<Integer,CompetetionObject> comMap = new HashMap<>();

    JsonArray arrayListing = root.getAsJsonArray();
    for (int i = 0; i < root.getAsJsonArray().size(); i++) {
        int id = Integer.parseInt(arrayListing.get(i).getAsJsonObject().get("id").toString());
        String name = arrayListing.get(i).getAsJsonObject().get("navn").toString();
        String provider = arrayListing.get(i).getAsJsonObject().get("udgiver").toString();
        String discription = arrayListing.get(i).getAsJsonObject().get("beskrivelse").toString();
        int signedUp = Integer.parseInt(arrayListing.get(i).getAsJsonObject().get("tilmeldte").toString());
        String startDate = arrayListing.get(i).getAsJsonObject().get("startdate").toString();
        String endDate =  arrayListing.get(i).getAsJsonObject().get("enddate").toString();
        CompetetionObject co = new CompetetionObject(id, name, provider, discription, signedUp, startDate, endDate);
        String day = startDate.substring(1, 3);
        String month = startDate.substring(5,6);
        String year = startDate.substring(7,startDate.length()-1);
        DateTime d = new DateTime(year+"-"+month+"-"+day);
        System.out.println(discription);
        comMap.put(id, co);
    }
}

我的 Java 程序的输出:

    [{"id":0,"navn":"Vind telefon","udgiver":"Telia","beskrivelse":"Vind en Iphone 5 ved at g\u00e6tte 1 sp\u00f8rgsm\u00e5l","tilmeldte":89,"startdate":"10-04-2013","enddate":"30-06-2013"},{"id":1,"navn":"Fri taletid","udgiver":"Telmore","beskrivelse":"Vind et \u00e5rs forbrug af fri data og fri taletid","tilmeldte":701,"startdate":"03-03-2013","enddate":"10-06-2013"},{"id":2,"navn":"Vind 5000 kr.","udgiver":"Bilka","beskrivelse":"Vind et gavekort p\u00e5 5000 kr til bilka.","tilmeldte":101,"startdate":"10-05-2013","enddate":"01-07-2013"},{"id":3,"navn":"Fri vin","udgiver":null,"beskrivelse":"Vind et \u00e5rs forbrug af vin","tilmeldte":391,"startdate":"01-04-2013","enddate":"10-07-2013"},{"id":4,"navn":"Vind et TV","udgiver":"El-giganten","beskrivelse":"Vind et 60\" LED tv til stuen","tilmeldte":22,"startdate":"01-04-2013","enddate":"22-07-2013"},{"id":5,"navn":"Vind en telefon","udgiver":"Samsung","beskrivelse":"Vind en Galaxy S4 4g telefon","tilmeldte":784,"startdate":"10-04-2013","enddate":"30-07-2013"},{"id":6,"navn":"Gratis Vand","udgiver":"Aqua D'or","beskrivelse":"Vind et helt \u00e5rs forbrug af vand og dansk vand","tilmeldte":345,"startdate":"01-03-2013","enddate":"18-07-2013"},{"id":7,"navn":"Fri Adwords","udgiver":"Google","beskrivelse":"Vind adwords kuponner til en v\u00e6rdi af 10.000","tilmeldte":22,"startdate":"10-02-2013","enddate":"22-08-2013"},{"id":8,"navn":"Morgenmads produkter","udgiver":"Kellogs","beskrivelse":"Vind et helt \u00e5rs forbrug af kellogs produkter","tilmeldte":111,"startdate":"01-05-2013","enddate":"10-09-2013"},{"id":9,"navn":"Vind t\u00f8j for 10.000","udgiver":"Jack & Jones","beskrivelse":"Vind et gavekort til Jack & Jones p\u00e5 10.000","tilmeldte":33,"startdate":"03-05-2013","enddate":"01-10-2013"}]
"Vind en Iphone 5 ved at gætte 1 spørgsmål"
"Vind et års forbrug af fri data og fri taletid"
"Vind et gavekort på 5000 kr til bilka."
"Vind et års forbrug af vin"
"Vind et 60\" LED tv til stuen"
"Vind en Galaxy S4 4g telefon"
"Vind et helt års forbrug af vand og dansk vand"
"Vind adwords kuponner til en værdi af 10.000"
"Vind et helt års forbrug af kellogs produkter"
"Vind et gavekort til Jack & Jones på 10.000"

最佳答案

它没有正确记录,但 JsonElement#toString() 为您提供了一个表示 JSON 元素的字符串,并且适合重新创建 JSON 序列化。你想要的是 JsonElement#getAsString()。如果您不查看字符串,这将引发错误,但如果是,您将获得字符串值。

这里有一个测试程序来演示:

import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
public class Test {
    public static void main(String[] args) {
        String in = "{\"hello\":\"world\"}";
        System.out.println(in);
        JsonElement root = new JsonParser().parse(in);
        System.out.println(root.getAsJsonObject().get("hello").toString());
        System.out.println(root.getAsJsonObject().get("hello").getAsString());
    }
}

及其输出:

{"hello":"world"}
"world"
world

关于java - 来自 Gson : remove double quotes 的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16639482/

相关文章:

java - 将较短范围的 Bean 实例注入(inject)到 CDI 中较大范围的 bean 实例中 - 它是如何工作的?

java - 方法参数在 Java 中是线程安全的吗?

java - 无法从服务调用共享首选项

java - [Java] : Unable to parse a JSON with no array/sub array in it

javascript - 在 JavaScript 中使用 crossfilter 动态返回结果

java - 如果将特定类型的对象序列化为 JSON 作为对象,如何从 Java 中的 JSON 反序列化该对象?

java - 如何在单元测试期间在基于 Spring Java 配置的应用程序中初始化 log4j2?

json - 使用 jq,将任意 JSON 扁平化为分隔符分隔的扁平字典

java - 反序列化复杂的 gson - Java

java - 使用 GSON 反序列化 json 作为时间戳