簡體   English   中英

如何在Java中的JSON解析器的字符串中轉義雙引號

[英]How to escape double quotes in a string for json parser in Java

我得到如下字符串:

{
    "test": [
        "",
        "abc",
        "IF(Var218 = "charlie") AND (Var85 ≤ 0) AND (Var207 = \"some value\"; \"du\") THEN Appetency = 1 ",
        "",
        """"
    ]
}

字符串將被解析為JSON對象,現在的問題是我應該如何有效地轉義Java中字符串中的某些雙引號?

上面的字符串只是一個示例,請注意,並非字符串中的所有雙引號都應轉義,僅應轉義例如“ charlie”和““”“中的雙引號,否則json解析器將無法正確解析該字符串。 預期結果應為:

{
    "test": [
        "",
        "abc",
        "IF(Var218 = \"charlie\") AND (Var85 ≤ 0) AND (Var207 = \"some value\"; \"du\") THEN Appetency = 1 ",
        "",
        "\"\""
    ]
}

謝謝。

我正在為此使用Gson庫。 但看起來這就是您要的。

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
...
public void stuff()
    {
        List<String> data = new ArrayList<String>();
        data.add("");
        data.add("abc");
        data.add("IF(Var218 = \"charlie\") AND (Var85 &le; 0) AND (Var207 = \"some value\"; \"du\") THEN Appetency = 1 ");
        data.add("\"\"");

        Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();

        JsonObject test = new JsonObject();
        JsonElement jsonData = gson.toJsonTree(data, new TypeToken<List<String>>(){}.getType());
        test.add("test", jsonData);

        String json = gson.toJson(test);
        System.out.println(json);
    }

這將產生:

{
  "test":[
    "",
    "abc",
    "IF(Var218 = \"charlie\") AND (Var85 &le; 0) AND (Var207 = \"some value\"; \"du\") THEN Appetency = 1 ",
    "",
    "\"\""
  ]
}

在Java中,您使用" \\"轉義,JSON也是如此。 問題在於\\"不包含反斜杠,因此您也需要轉義該斜杠:

String json = "hello \\\"world\\\""; // hello "world"

注意三(3)個反斜杠。

我看不到這一點,因為您正在轉義正確的雙引號

"\"\"" // this will produce ""

如此簡單在每個“放置一個”之前

以下算法應在input使用JSON字符串

String progress = "";
for(int c = 0; c < input.length(); c++){
    char ch = input.charAt(c);
    if(ch == '\\'){    // Skip if the next character is already escaped
        c++;
        continue;
    }
    if(ch == '\"') progress += "\\\""; // Results in \"
    else progress += ch;    // Add the character to progress
}

轉義的字符串現在progress

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM