2010-06-01 48 views
9

Tôi đang sử dụng net.sf.json.JSONObject để tạo một số dữ liệu được gửi đến ứng dụng giao diện người dùng và mã tôi đang tương tác không giống như cách thêm báo giá đánh dấu vào mọi tên trường.Xóa dấu ngoặc kép trong JSONObject

Ví dụ:

myString = new JSONObject().put("JSON", "Hello, World!").toString(); 

tạo ra chuỗi { "JSON": "Hello, World"}.

Điều tôi muốn trả lại là {JSON: "Xin chào, Thế giới"} - không có dấu ngoặc kép xung quanh "JSON". Tôi phải làm gì để thực hiện điều đó?

+0

Tại sao bạn muốn làm điều đó? (Tôi tò mò) – OscarRyz

+0

Vì tôi đang tương tác với mã hiện có thích theo cách đó. (chỉ cần chỉnh sửa câu hỏi gốc để làm rõ hơn.) –

Trả lời

1

Các javadoc nói

Các văn bản được tạo ra bởi toString phương pháp nghiêm ngặt phù hợp với các quy tắc sysntax JSON .

Nếu bạn muốn tuân thủ các quy tắc cú pháp JSON, bạn không nên xóa dấu ngoặc kép.

Hoặc nếu bạn không quan tâm đến các quy tắc, bạn có thể tạo cho mình một phương pháp đơn giản để đối chiếu các chuỗi này.

Ngoài ra, thay thế 2 lần xuất hiện đầu tiên của dấu ngoặc kép là hợp lệ, như @CharlesLeaf cho biết.

1

Tôi có thể hỏi tại sao bạn muốn làm điều này không? Nó sẽ không tiết kiệm nhiều trong tổng số byte được chuyển trong yêu cầu.

Trong mọi trường hợp, tôi muốn nói rằng bạn phải viết một cái gì đó, một regexp hoặc một cái gì đó khác, thay thế /\"([^"]+)\"\:/ cho khớp đầu tiên $1. Tôi không thông thạo Java nên tôi không thể giúp gì được nữa.

+0

Tôi đang cố gắng thay đổi một số mã back-end mà không phải vặn vẹo xung quanh nhiều với giao diện người dùng ... và giao diện người dùng dường như không thích dấu ngoặc kép. Vì vậy, tôi chỉ cố gắng cung cấp cho front-end những gì nó muốn. –

+1

Dường như một lỗi trong giao diện người dùng.Nhưng trong mọi trường hợp, biểu hiện chính quy của tôi sẽ có thể giúp bạn. Thay thế '\" ([^ "] +) \" \: 'bằng' $ 1: 'theo bất kỳ cách nào sẽ hoạt động trong Java.' $ 1' sẽ khớp, trong ví dụ của bạn 'JSON'. – CharlesLeaf

+0

Có nó sẽ ... Khi bạn chuyển một tấn dữ liệu qua websockets với nodejs, lượng dữ liệu bạn đang tiết kiệm trên các đường ống mà không cần chuyển các dấu ngoặc kép là rất lớn –

1

JSON definition mô tả từng cặp như một chuỗi: giá trị, vì vậy bạn không thể mong đợi các thư viện net.sf trái với hợp đồng cụ thể đó. Nếu bạn lo lắng về việc có thể truy cập vào các giá trị khi chúng được trả lại cho một số mã javascript (nếu đó là những gì bạn đang làm), bạn không cần phải.

var str = {"JSON": "Hello, World"}; 
var obj = eval(str); 
alert(obj.JSON); // Alerts "Hello, World" 
+0

Nếu OP muốn một chuỗi tôi nghĩ rằng nó là ok. để tạo một đối tượng từ {"JSON": "Hello world"}, anh ta có thể sử dụng 'jQuery.parseJSON (" một chuỗi json ở đây ");' –

0

Bạn có thể sử dụng phương pháp sau đây để loại trừ trích dẫn từ các tên thuộc tính trong json của bạn:

net.sf.json.util.WebUtils.toString(JSONObject);

Tham khảo java doc:

5

Tôi đã đi qua một vài các ứng dụng/thư viện web chẳng hạn như amCharts hỗ trợ JSON như đầu vào JavaScipt trong đó yêu cầu của bạn là cần thiết vì JSON thực không được hỗ trợ.

Việc bạn có thể làm là tạo một hàm javascript phổ biến và sử dụng một chút RegEx để lọc JSON.

function CleanJSONQuotesOnKeys(json) { 
    return json.replace(/"(\w+)"\s*:/g, '$1:'); 
} 
Các vấn đề liên quan