Bạn có thể tránh Gson chuyển đổi <<và và >> thành chuỗi thoát unicode không?


127

Tôi nhận thấy rằng Gson chuyển đổi chuỗi "<" thành chuỗi thoát unicode trong đầu ra JSON. Bạn có thể tránh điều này bằng cách nào đó hoặc các ký tự như "<" và ">" luôn phải được thoát trong JSON không?

Xem xét ví dụ này mà in {"s":"\u003c"}; Tôi muốn đơn giản {"s":"<"}.

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

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

Bối cảnh: đoạn JSON tôi đang tạo không liên quan gì đến các trang HTML hoặc thậm chí JavaScript; nó chỉ được sử dụng để truyền thông tin có cấu trúc nhất định cho một phần mềm khác (được nhúng trong một thiết bị, được viết bằng C).


2
GSON có mặc định làm điều đó không? Ái chà. Đó là cài đặt mặc định khá kỳ lạ, mặc dù điều hoàn toàn hợp pháp phải làm từ phối cảnh đặc tả JSON.
StaxMan

3
Vâng, nó cũng đáng ngạc nhiên với tôi. May mắn là phương thuốc dễ dàng một khi bạn biết nơi để tìm. :) Nếu không, sau một ngày trải nghiệm với nó, tôi thấy Gson là một thư viện đẹp, sạch sẽ, với một hướng dẫn sử dụng tuyệt vời nữa!
Jonik

6
Điều này cũng xảy ra với ký tự "=", biến thành "\ u003d".
Russell Silva

Câu trả lời:


253

Bạn cần phải vô hiệu hóa thoát HTML .

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

11
Tôi tự hỏi tại sao nó mặc định. JSON không có gì để làm với HTML. Các thông số kỹ thuật chỉ "và `\` cần phải được thoát.
Mark Jeronimus

Các bạn, đó không phải là làm việc cho tôi. tôi đang sử dụng '' com.sapesup.retrofit2: retrofit: 2.3.0 '' && '' com.sapesup.retrofit2: convert-gson: 2.3.0 ''. Làm ơn giúp tôi.
Mr Code
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.