Gson'un “<” ve “>” kodlarını unicode kaçış dizilerine dönüştürmesini engelleyebilir misiniz?


127

Gson'un "<" dizesini JSON çıktısında bir unicode kaçış dizisine dönüştürdüğünü fark ettim . Bundan bir şekilde kaçınabilir misiniz, yoksa "<" ve ">" gibi karakterlerin JSON'da her zaman öncelenmesi mi gerekiyor?

Yazdıran bu örneği düşünün {"s":"\u003c"}; Basitçe isterdim {"s":"<"}.

public static void main(String[] args) {
    Gson gson = new GsonBuilder().create();
    System.out.println(gson.toJson(new Foo()));  
}

static class Foo {
    String s = "<";
}

Bağlam: Oluşturmakta olduğum JSON parçasının HTML sayfaları ve hatta JavaScript ile hiçbir ilgisi yoktur; yalnızca belirli yapılandırılmış bilgileri başka bir yazılım parçasına geçirmek için kullanılır (C ile yazılmış bir cihaza gömülü).


2
GSON bunu varsayılan olarak yapıyor mu? Vay. JSON özellikleri açısından tamamen yasal bir şey olsa da, bu oldukça garip bir varsayılan ayardır.
StaxMan

3
Evet, benim için de şaşırtıcıydı. Neyse ki, nereye bakacağınızı bildiğinizde çare kolaydır. :) Aksi takdirde, bir günlük deneyimimden sonra, Gson'u gerçekten temiz, güzel bir kitaplık ve harika bir kullanım kılavuzu ile buluyorum !
Jonik

6
Bu aynı zamanda "\ u003d" karakterine dönüşen "=" karakterinde de olur.
Russell Silva

Yanıtlar:


253

HTML kaçışını devre dışı bırakmanız gerekir .

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

11
Neden varsayılan olarak açık olduğunu merak ediyorum. JSON'un HTML ile ilgisi yoktur. Spec devletler sadece "ve `\` ihtiyaç çıkış yapılmasını.
Mark Jeronimus

Beyler, bu benim için işe yaramadı. '' com.squareup.retrofit2: retrofit: 2.3.0 '' && '' com.squareup.retrofit2: converter-gson: 2.3.0 '' kullanıyorum. Lütfen bana yardım et.
Mr Code
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.