Renaming JSON properties if they contain a certain character without JSON.stringify
我有一个独特的问题。我目前正在尝试将 JSON 数据源连接到剑道网格。因此,JSON 中的任何地方都不能有
1
2 3 4 |
[
{"ID#":"1","Prop1":"Val1#"}, {"ID#":"2","Prop2":"Val2"}, ] |
并转义
1
2 3 4 |
[
{"ID//#":"1","Prop1":"Val1//#"}, {"ID//#":"2","Prop2":"Val2"}, ] |
最大的问题是 JSON 几乎可以像任何东西:可能有任意数量/名称的键/值。
我的尝试:
我试图像这样转义
然后我尝试将
1
2 3 4 5 6 7 8 |
var dataSource = JSON.parse(result, function(key, value) {
if(typeof value ==="string") { return value.replace("#","#"); } else { return value; } }); |
这适用于价值观!但是,键仍然可能包含
1
2 3 4 5 6 7 8 9 10 11 12 13 |
for (var object in dataSource) {
for (var property in object) { if (object.hasOwnProperty(property)) { var keys = Object.keys(object); for(var key in keys) { var oldName = key; var newName = key.replace("#","//#"); object[newName] = object[oldName]; delete object[oldName]; } } } } |
上面的这部分似乎没有效果。它甚至不会抛出错误。
我还尝试将
1
2 |
var fixed = $("#grid").html().replace(/hashliteral/g,"#");
$("#grid").html(fixed); |
这确实有效,但它破坏了剑道网格和所有绑定。网格功能是必须的,所以我不能使用这个解决方案。
回顾一下
我正在尝试删除/替换或转义 JSON 数据中的所有
-
我不能使用
JSON.stringify 并将# 替换为////# 因为JSON.parse 失败。 -
我不能使用
# 因为剑道标题不能有特殊字符。 -
我不能使用 jQuery 来修改
$(“#grid”).html() 因为它破坏了网格绑定。 - 关键可以是任何东西。该值也可以是任何值。
- JSON 不是嵌套的或复杂的。
- 我无法在 KendoGrid 列上定义字段/标题,因为我不知道字段/标题需要是什么,数据非常动态。
我已经准备好放弃这一点,只需从数据中删除所有
我认为您已经走在正确的Rails上,但是创建一个新的对象列表会更容易:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
var newObjects = [];
for (var i = 0; i < dataSource.length; i++ ) { for (var key in currentObject) { newObjects.push(newObject); console.log(newObjects); |
希望对您有所帮助,我正确理解了您的问题。
编辑:您不能使用像
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/268825.html