替换项目而不是给出整个路径

时间:2015-01-20 19:39:27

标签: javascript json jsonpath

在这个json中,当我找到以下项目时,我需要对值进行base64编码,并使用javascript将其替换为编码值。

对于这些键pbId,remmedId,remId,pbMedId。 我需要用base64编码的值替换相应的值。

{
    "output": {
        "rem": {
            "rems": {
                "lastNotif": null,
                "remmed": [
                    {
                        "pbId": "201734",
                        "remmedId": "2803790",
                        "remId": "250004",
                        "class": "com.burst.zumba"
                    }, {
                        "pbId": "190244",
                        "remmedId": "2803788",
                        "remId": "250004",
                        "class": "com.burst.zumba"
                    }
                ],
                "remType": "DAY",
                "notifTime": "17:30",
                "class": "com.burst.zumba",
                "enabled": "Y",
                "lastTime": "2014-08-25 16:26:05",
                "addedTime": "2014-08-25 16:26:05",
                "remFreq": "HOLI",
                "name": "test1",
                "remId": "250004",
                "remOut": [],
                "status": "Y",
                "pbId": "1250003"
            },
            "List": [
                {
                    "SSType": "MJD",
                    "rems": null,
                    "prsName": "DrJohnSmith",
                    "prsPhone": "5555555555",
                    "expDate": "2015-04-14",
                    "lastDate": "2014-08-13 01:00:12",
                    "issueDate": null,
                    "modDate": "2014-08-27 10:15:22",
                    "writtDate": "2014-04-14",
                    "pbMedId": "2017346",
                    "name": "CARDIO",
                    "SSId": "237421923",
                    "pbId": "1250007653",
                    "createdDate": "2014-08-27 10:15:22"
                }, {
                    "SSType": "JCX",
                    "rems": null,
                    "prsName": "Dr John Doe",
                    "prsPhone": "5555555555",
                    "expDate": "2015-04-14",
                    "lastDate": "2014-08-13 01:00:12",
                    "issueDate": null,
                    "modDate": "2014-09-02 17:38:47",
                    "writtDate": "2014-04-14",
                    "pbMedId": "1902449",
                    "name": "VICTORY",
                    "class": "237342123",
                    "pbId": "12503003",
                    "createdDate": "2014-08-26 14:32:08"
                }
            ]
        }
    }
}

我可以像output.rem.rems.remmed一样去找到值。但是我有什么方法可以做全局搜索并替换我的对象而不是给出整个路径

1 个答案:

答案 0 :(得分:0)

此代码以递归方式迭代对象。当它找到密钥时,它将使用btoa对它们进行编码。我已用JSON.stringify写回输出,以将结果显示为测试用例。

要使用:call convertToBase64,第一个参数是数据对象,所有其他参数都是可选的。您可以添加键作为参数。

var data = {
    "output": {
        "rem": {
            "rems": {
                "lastNotif": null,
                "remmed": [
                    {
                        "pbId": "201734",
                        "remmedId": "2803790",
                        "remId": "250004",
                        "class": "com.burst.zumba"
                    }, {
                        "pbId": "190244",
                        "remmedId": "2803788",
                        "remId": "250004",
                        "class": "com.burst.zumba"
                    }
                ],
                "remType": "DAY",
                "notifTime": "17:30",
                "class": "com.burst.zumba",
                "enabled": "Y",
                "lastTime": "2014-08-25 16:26:05",
                "addedTime": "2014-08-25 16:26:05",
                "remFreq": "HOLI",
                "name": "test1",
                "remId": "250004",
                "remOut": [],
                "status": "Y",
                "pbId": "1250003"
            },
            "List": [
                {
                    "SSType": "MJD",
                    "rems": null,
                    "prsName": "DrJohnSmith",
                    "prsPhone": "5555555555",
                    "expDate": "2015-04-14",
                    "lastDate": "2014-08-13 01:00:12",
                    "issueDate": null,
                    "modDate": "2014-08-27 10:15:22",
                    "writtDate": "2014-04-14",
                    "pbMedId": "2017346",
                    "name": "CARDIO",
                    "SSId": "237421923",
                    "pbId": "1250007653",
                    "createdDate": "2014-08-27 10:15:22"
                }, {
                    "SSType": "JCX",
                    "rems": null,
                    "prsName": "Dr John Doe",
                    "prsPhone": "5555555555",
                    "expDate": "2015-04-14",
                    "lastDate": "2014-08-13 01:00:12",
                    "issueDate": null,
                    "modDate": "2014-09-02 17:38:47",
                    "writtDate": "2014-04-14",
                    "pbMedId": "1902449",
                    "name": "VICTORY",
                    "class": "237342123",
                    "pbId": "12503003",
                    "createdDate": "2014-08-26 14:32:08"
                }
            ]
        }
    }
}

	function convertToBase64(obj)
	{
		var keys = Object.keys(obj);
		var args = Array.prototype.slice.call(arguments, 1); //copy all arguments except the first.
		for (var i = 0; i < keys.length; ++i)
		{
			if ( Object.prototype.toString.call(obj[keys[i]]) == "[object Object]" || Object.prototype.toString.call(obj[keys[i]]) == "[object Array]")
			{
				convertToBase64.apply(this, [obj[keys[i]]].concat(args));
			}
			else
			{
				if ( args.indexOf(keys[i]) > -1)
				{
					obj[keys[i]] = btoa(obj[keys[i]]);
				}
			}
		}
	}

	convertToBase64(data, "remmedId", "pbMedId", "remId", "pbId");
	document.write(JSON.stringify(data));