web-dev-qa-db-ja.com

単一引用符で囲まれた(無効な)JSONを逆シリアル化するようにJacksonを構成する

私は、ジャクソンライブラリを使用する初心者です。

これを実行しようとしていますが(以下を参照)、エラーがスローされています。

String x="{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}";
ObjectMapper mapper = new ObjectMapper();

try {
    JsonNode df=mapper.readValue(x,JsonNode.class);
    int i=0;
} catch .....

例外:

org.codehaus.jackson.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name
at [Source: Java.io.StringReader@1afd1810; line: 1, column: 3]
  at org.codehaus.jackson.JsonParser._constructError(JsonParser.Java:1291)

単一引用符( ')を二重引用符( ")に置き換えても同じことが機能します。

28
Pipalayan Nayak

有効なJSONではありませんが、ジャクソンに許可するように伝えることができます。方法は次のとおりです。

String x = "{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}";
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
JsonNode df = mapper.readValue(x, JsonNode.class);
System.out.println(df.toString());
// output: {"candidateId":"k","candEducationId":1,"activitiesSocieties":"Activities for cand1"}
58

JSONの文字列は、二重引用符(")、not単一引用符(')、これがエラーの理由です。二重引用符を使用します。

有効なJSON文字列を指定するパイプダイアグラムを次に示します(これらは二重引用符でのみカプセル化できることに注意してください!)

Valid JSON Strings Pipe Diagram
(ソース: json.org

(JSONの完全な仕様については、 json.org を参照してください。)

16
Mark Elliot

これは私の場合の動作方法です:

var jsonString ='{"it":"Stati Uniti d'America"}';
jsonString =jsonString.replace("'", "\\\\u0027");
1
user2918934