2010-06-01 129 views
9

我使用net.sf.json.JSONObject創建一些數據被髮送到前端應用,以及我與交互的代碼不喜歡它的方式加入報價標記每個字段名稱。刪除引號

例如:

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

生成字符串{ 「JSON」: 「你好,世界」}。

我想這回是什麼{JSON:「你好,世界」} - 周圍沒有「JSON」行情。我需要做些什麼才能做到這一點?

+0

爲什麼你想這樣做?(我很好奇) – OscarRyz 2010-06-01 18:44:15

+0

因爲我正在與現有的代碼相互作用,喜歡它的方式。 (只是編輯了原來的問題,使其更清楚。) – 2010-06-01 18:56:36

回答

1

javadoc

通過了toString方法 嚴格符合JSON sysntax規則產生的文本。

如果您想要符合JSON語法規則,請勿刪除引號。

或者,如果你不關心規則,你可以創建你自己的簡單的方法去構造這個字符串。

而且,替代報價的2個事件是有效的,因爲@CharlesLeaf說。

1

我可以問你爲什麼要這樣做嗎?它不會節省請求中傳輸的總字節數。

在任何情況下,我會說你必須寫一些東西,正則表達式或其他東西,用/\"([^"]+)\"\:/代替$1。我不太流利的Java,所以我實際上無法再幫忙。

+0

我試圖改變一些後端代碼,而不是與前端搞得太多......而前端似乎不喜歡引號。所以我只是試圖給前端提供它想要的東西。 – 2010-06-01 18:56:06

+1

看起來像前端的錯誤。但無論如何,我的正則表達式應該能夠幫助你。用'$ 1:'替換'\「([^」] +)\「:',以''1'的方式替換''$ 1''將在您的示例'JSON'中匹配 – CharlesLeaf 2010-06-01 19:01:02

+0

是的,它會...當你通過使用nodejs的websockets傳輸大量數據時,你在管道上保存的數據量並不會傳輸雙引號,這是非常重要的 – 2015-07-28 17:52:30

1

的JSON definition描述了每對爲一個字符串:值,所以你不能指望net.sf庫違反特定的合同。如果你擔心在返回一些JavaScript代碼時能夠訪問這些值(如果這是你正在做的),那麼你就不需要了。

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

如果OP想要一個字符串,我認爲它是可以的但是如果OP想要從{「JSON」:「Hello world」}創建一個對象,他可以使用'jQuery.parseJSON(「這裏是一個json字符串」);' – 2012-01-17 16:01:39

0

您可以使用下面的方法來排除屬性名的報價在你的JSON:

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

參考Java doc

5

我遇到了幾個Web應用程序/庫,如支持JSON的amCharts,如JavaScipt輸入,您的請求是必需的,因爲不支持真正的JSON。

你可以做的是創建一個通用的JavaScript函數,並使用一點RegEx過濾JSON。

function CleanJSONQuotesOnKeys(json) { 
    return json.replace(/"(\w+)"\s*:/g, '$1:'); 
}