改变|操纵json元素或将名称空间前缀附加到json元素

时间:2016-09-06 14:56:47

标签: json namespaces badgerfish

先谢谢你。 我需要一些帮助来操纵以下内容:

  • 最终,我真的需要最简单的方法来更新我的代码中的父json元素(或任何json元素)。有没有办法获取我的var prime输出并将startNode更改为tns:startNode?

这是我的代码

var vPrefix = "tns";
var vNamespace = "http://somenamespace.com";
var badgerfish = function(text) {
    return {
        "$": text
    };
};
var prime = {};
prime.startNode = {};

prime.startNode['@xmlns'] = {"tns": vNamespace};

prime.startNode.test1 = badgerfish("testValue1");
prime.startNode.test2 = badgerfish("testValue2");
prime.startNode.test3 = {};
prime.startNode.test3.subtest1 = badgerfish("subtestValue1");
var node = JSON.stringify(prime);
session.output.write(node);

输出以下内容:

{
  "startNode": {
    "@xmlns": {
      "tns": "http:\/\/somenamespace.com"
    },
    "test1": {
      "$": "testValue1"
    },
    "test2": {
      "$": "testValue2"
    },
    "test3": {
      "subtest1": {
        "$": "subtestValue1"
      }
    }
  }
}

我尝试完成的所有内容如下(差异只是startNode上的tns前缀):

{
  "tns:startNode": {
    "@xmlns": {
      "tns": "http:\/\/somenamespace.com"
    },
    "test1": {
      "$": "testValue1"
    },
    "test2": {
      "$": "testValue2"
    },
    "test3": {
      "subtest1": {
        "$": "subtestValue1"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

总是这样:

prime = JSON.parse( JSON.stringify(prime).replace(/startNode/g, 'tns:startNode') );

这将为您提供有效的JSON对象,但如果您想输出JSON的字符串表示,则可能甚至不需要parse。我不确定这是否比通过JSON更新密钥更多或更少。