gpt4 book ai didi

javascript - 将字符串转换为对象层次结构

转载 作者:行者123 更新时间:2023-11-30 10:01:39 24 4
gpt4 key购买 nike

我从 API 返回了以下字符串,我想使用 javascript 将其转换为对象层次结构。

收到的字符串是:

"paymentInfoList.paymentInfo(0).receiver.amount":"12.00"

我想将它转换成一个 javascript 对象,例如:

{
paymentInfoList: {
PaymentInfo: [{
receiver: {
amount: 12.0
}
}]
}
}

我可以编写自己的解析器,但想知道是否已经有一些代码。

更新

根据@JasonCust 的回答,这里有一个解析器来解析来自 PayPal Adaptive Payments Pay 方法的完整响应: https://github.com/danielflippance/paypal-ap-parser

最佳答案

我不知道处理该格式的现有解析器。也许在 Paypal 的开发者网站上有什么?如果你自己滚动,你可以使用递归函数来实现,如下例所示。我还没有对它进行彻底的测试,但这是一个很容易做到的 POC。

function setObjVal(obj, paths, val) {
var path;
var arrayInfo;

if (paths.length === 0) {
return val;
}

obj = obj || {};
path = paths.shift();
arrayInfo = path.match(arrayRegExp);

if (arrayInfo) {
path = arrayInfo[1];

if (!Array.isArray(obj[path])) {
obj[path] = [];
}

obj[path][arrayInfo[2]] = setObjVal(obj[path][arrayInfo[2]], paths, val);
}
else {
obj[path] = setObjVal(obj[path], paths, val);
}

return obj;
}

var arrayRegExp = /^(\w+)\((\d+)\)$/;

var input = '"paymentInfoList.paymentInfo(0).receiver.amount":"12.00"';
var pair = input.split(':').map(function (str) { return str.replace(/"/g, ''); });
var newObj = setObjVal({}, pair[0].split('.'), pair[1]);

function setObjVal(obj, paths, val) {
var path;
var arrayInfo;

if (paths.length === 0) {
return val;
}

obj = obj || {};
path = paths.shift();
arrayInfo = path.match(arrayRegExp);

if (arrayInfo) {
path = arrayInfo[1];

if (!Array.isArray(obj[path])) {
obj[path] = [];
}

obj[path][arrayInfo[2]] = setObjVal(obj[path][arrayInfo[2]], paths, val);
}
else {
obj[path] = setObjVal(obj[path], paths, val);
}

return obj;
}

document.write('<pre>' + JSON.stringify(newObj, null, 4) + '</pre>');

或者如果你想使用lodash,你可以使用_.set() :

var newObj = _.set({}, pair[0].replace(/\(/g, '[').replace(/\)/g, ']'), pair[1]);

var input = '"paymentInfoList.paymentInfo(0).receiver.amount":"12.00"';
var pair = input.split(':').map(function (str) { return str.replace(/"/g, ''); });

var newObj = _.set({}, pair[0].replace(/\(/g, '[').replace(/\)/g, ']'), pair[1]);

document.write('<pre>' + JSON.stringify(newObj, null, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>

关于javascript - 将字符串转换为对象层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com