簡體   English   中英

JSON 解析器

[英]JSON parse reviver

我正在嘗試將 JSON 對象列表解析為一個名為 jsonStructure 的變量,該變量帶有一個 reviver 函數,該函數將 5 添加到 stringData 變量中的“年份”對象。 但是,該變量返回 undefined。 我不確定自己做錯了什么,因為我的解析器設置與本書設置的完全一樣。 這是我的代碼如下:

var stringData = '{ "year": 2011, "month": 8, "day": 9, "hour": 5, "minute": 32 }';

var jsonStructure = JSON.parse(stringData, function (key, value) {
   if (key == "year")
      return value + 5;
});

問題

這里的問題是,如果鍵與year不匹配,您將不會返回任何值,從而有效地使其他所有內容都未定義

解決方案

我們需要始終確保我們從我們的 revive 返回一個值:

 var stringData = '{ "year": 2011, "month": 8, "day": 9, "hour": 5, "minute": 32 }'; var jsonStructure = JSON.parse(stringData, function (key, value) { return key == "year" ? value + 5 : value; }); console.log(jsonStructure)

解釋

MDN 文檔站點:

使用reviver參數

如果指定了reviver,則解析計算出的值在返回之前會進行轉換。 具體來說,計算值及其所有屬性(從嵌套最多的屬性開始並繼續到原始值本身)單獨運行通過 reviver。 然后它被調用,包含被處理的屬性的對象作為這個對象,屬性名稱作為字符串,屬性值作為參數。 如果 reviver 函數返回 undefined(或不返回任何值,例如,如果執行在函數的末尾結束),則該屬性將從對象中刪除。 否則,該屬性將被重新定義為返回值。

 var stringData = '{ "year": 2011, "month": 8, "day": 9, "hour": 5, "minute": 32 }'; var jsonStructure = JSON.parse(stringData, function(key, value) { if (key == "year") { return value + 5; } return value }); console.log(jsonStructure);

暫無
暫無

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

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