| 887 | var j; |
| 888 | |
| 889 | function walk(holder, key) { |
| 890 | |
| 891 | // The walk method is used to recursively walk the resulting structure so |
| 892 | // that modifications can be made. |
| 893 | |
| 894 | var k, v, value = holder[key]; |
| 895 | if (value && typeof value === 'object') { |
| 896 | for (k in value) { |
| 897 | if (Object.prototype.hasOwnProperty.call(value, k)) { |
| 898 | v = walk(value, k); |
| 899 | if (v !== undefined) { |
| 900 | value[k] = v; |
| 901 | } else { |
| 902 | delete value[k]; |
| 903 | } |
| 904 | } |
| 905 | } |
| 906 | } |
| 907 | return reviver.call(holder, key, value); |
| 908 | } |
| 909 | |
| 910 | |
| 911 | // Parsing happens in four stages. In the first stage, we replace certain |