簡體   English   中英

如何將變量解析為 JSON 對象 (Javascript)

[英]How to parse variables to JSON Object (Javascript)

我希望能夠將外部變量解析為 JSON 對象。

像這樣的事情會做:

var username = "zvincze";

並使用該變量解析 JSON 對象:

var json = '{"username":"VARIABLE_GOES_HERE"}'
var obj = JSON.parse(json);

這是一個非常簡單的問題,我似乎無法弄清楚。 事實上,我什至不知道是否有辦法真正實現這樣的目標。

我覺得你在做什么有點奇怪。 根據定義(JavaScript Object Notation),您創建的對象是 json。

var obj = {};
obj.username = "zvincze";

//obj is now json
var str = JSON.stringify(obj);
//str == {'username':'zvincze'}

JSON.parse(obj)應該失敗,因為obj已經是 json。

您需要仔細區分 JSON 和 JavaScript 對象。 它們是完全不同的兩種東西。

JSON 是一種獨立語言的基於字符的數據表示,用於數據交換。 例如,如果您將數據發送到服務器,則它需要采用字符串形式,因此您需要將數據轉換為 JSON。 如果您從服務器接收數據,並且它是 JSON 格式,則需要將其轉換為 JavaScript 對象,以便在您的 JavaScript 程序中使用它。

JSON 實際上與 JavaScript 無關。 例如,JSON 可用作 Java 程序交換數據的基於字符串的數據表示。 Java 和幾乎所有其他語言都提供了自己的庫例程,用於將其本機數據轉換為 JSON,反之亦然。

JavaScript 中使用的 JSON 和 JavaScript 對象之間的唯一關系是 JSON 字符串看起來很像 JavaScript 對象文字,但有一些額外的限制,例如必須引用鍵,不能保存某些數據類型(例如函數),以及它不能保存循環引用。

“JSON”的“JS”部分並不表示 JSON 是一種基本的 JavaScript 數據結構,也不表示 JSON 在 JavaScript 中用於表示或操作數據。 它僅僅來自這樣一個事實,即如上所述,JSON 字符串的格式松散地模仿了 JavaScript 對象文字的格式。

在正常的日常 JavaScript 編程中,您永遠不會使用 JSON,也無需擔心。 正如我所說,只有當您將數據發送到某個地方或從某個地方接收數據時,需要擔心 JSON,而這些數據格式需要 JSON。 當然,在進行 ajax 調用時就是這種情況,但實際上,即使如此,因為如果您告訴它正確的類型,jQuery 的$.ajax會自動將數據與 JavaScript 對象相互轉換,即使在這種情況下,您通常也不需要擔心 JSON。

請注意,JSON 可以表示原始值,而不僅僅是 JavaScript 對象。 例如, "1"是表示數字 1 的有效 JSON。

據我了解您的問題,您想創建一個 JavaScript 對象(不是 JSON),其中包含變量username值之一。 在這種情況下,您使用常規的舊 JavaScript 對象文字格式創建一個 JavaScript 對象

{username: username}

這意味着,創建一個對象,使用名為"username"的單個鍵(如果您願意,請引用它),其值是變量username的值。 同樣,除非您計划將此對象發送到需要 JSON 字符串表示的某個地方,否則在這種情況下甚至不需要考慮 JSON。

理論上,是的,正如一個答案所建議的那樣,您可以使用諸如'{"username":"' + VARIABLE_GOES_HERE + '"}''{"username":"' + VARIABLE_GOES_HERE + '"}'字符串算術創建一個具有username “插值”值的 JSON 字符串,然后轉換該 JSON使用JSON.parse字符串轉換為 JavaScript 對象。 然而,當您可以簡單地將 JavaScript 對象編寫為普通的 JavaScript 對象字面量時,絕對沒有理由跳過這些障礙。

另一個答案顯示了一種定義常規 JavaScript 對象的方法,然后使用JSON.stringify將其轉換為 JSON。 但是,同樣,在您的情況下,除非您計划將對象發送到某個地方,否則無需執行此操作。

另一個答案顯示了一種定義常規 JavaScript 對象的方法,然后將其字符串化為 JSON 字符串,然后立即將其解析回 JavaScript 對象,這將與您在字符串化和解析之前開始使用的對象完全相同。 完全沒有必要這樣做。

人們看到很多關於 SO 試圖以某種方式在 JSON 中操作、搜索或替換的問題,例如使用正則表達式。 幾乎沒有什么情況是你需要考慮做這樣的事情的。 JSON 有兩個基本操作:將值轉換為 JSON,以及將 JSON 轉換為值。 這兩者都以JSON.stringifyJSON.parse的形式內置於語言中,它們以絕對的可靠性和性能完成工作。 如果由於某種原因需要修改 JSON 字符串格式的數據,請不要操作該字符串; 您需要做的就是將其解析為 JavaScript 值,操作該值,然后將其轉換回 JSON。

不幸的是,由於未知的原因,許多正在學習這門語言的 JavaScript 程序員,包括許多在 SO 上發帖的人,都產生了一種誤解,認為 JSON一個 JavaScript 對象,或者他們必須考慮 JSON 和字符串化和解析才能處理普通的舊 JavaScript 對象,事實並非如此。

次要問題,但您在問題中使用了“解析”一詞。 我看到越來越多的人出於某種原因使用這個詞來表示“訪問”或“檢索”或“提取”。 實際上,“解析”具有非常具體的含義:根據特定語法將基於字符串的信息表示(例如程序或數據對象)分析為某種合適的計算機友好形式以供進一步處理。 JSON.parse所做的就是在這個意義上進行解析,因為它根據 JSON 語法將基於字符串的信息表示分析為 JavaScript 對象以供進一步處理。

不搞亂連接var json = '{"username":"'+ userName +'"}'你可以:

var ob = {};              // or simply: var ob = {username:"zvincze"};
ob.surname = "Zvincze";
ob.name    = "Zachary";
ob.id      = "5182842";

var json = JSON.stringify(ob);
var obj = JSON.parse(json);

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

var json = JSON.stringify({username:"zvincze"})

您可以簡單地連接如下字符串...

var json = '{"username":"' + VARIABLE_GOES_HERE + '"}'

在你的情況下:

var username = "zvincze";  
var json = '{"username":"' + username + '"}';

快樂編碼....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM