2014-11-06 22 views
8

Chúng tôi có một mẫu có đoạn dài cho ứng dụng khoa học viễn tưởng có chứa các ký tự như biểu tượng beta (ß-arrestin) vv Chúng tôi có một dịch vụ JSON chạy trên Mule có dữ liệu và vẫn tồn tại vào một cơ sở dữ liệu oracle. Yếu tố cụ thể này với đoạn dài là cho tôi một lỗi trong RAML/JSON. Bên dưới là lỗiCách để thoát khỏi các ký tự đặc biệt trong JSON

com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 9)): has to be escaped using backslash to be included in string value 

Yếu tố biểu mẫu mà chúng tôi không kiểm soát được. Vì vậy, về phía Mule làm thế nào chúng ta có thể thoát khỏi những nhân vật automagically như java đã URLEncoded. Nhiều người Cảm ơn

Trả lời

1

Trong trường hợp của bạn, có vẻ như dữ liệu đến không đúng định dạng. Nó phải ở trong an encoding supported by the JSON spec: UTF-8 (mặc định), UTF-16 hoặc UTF-32. Vì vậy, không chắc chắn nếu sau đây được áp dụng. Tuy nhiên ...

Đối với hầu hết các ứng dụng tôi muốn giới thiệu JSON to Object mapping, sẽ đảm nhiệm việc thoát. Nếu không, bạn có thể gọi trực tiếp Jackson (thư viện JSON được Mule sử dụng) String escape method.

Đây là ví dụ bạn có thể sử dụng trong MEL. String.valueOf là cần thiết vì quoteAsString trả về char[]:

<configuration> 
    <expression-language> 
    <import class="org.codehaus.jackson.io.JsonStringEncoder" /> 
    <global-functions> 
     def quoteJSONString(s) { 
     String.valueOf(JsonStringEncoder.getInstance().quoteAsString(s)) 
     } 
    </global-functions> 
    </expression-language> 
</configuration> 
2

Ở mục tiêu, bạn có thể nhận dữ liệu dưới dạng văn bản/đồng bằng.

sạch nó bằng cách chạy:

input.replaceAll("\\p{Cc}", ""). 

Chuyển đổi nó trở lại dữ liệu JSON sử dụng bất kỳ thư viện JSON:

JSONObject inputParams = JSONObject.fromObject(input); 

Hy vọng nó giúp.

Các vấn đề liên quan