我的节点应用以pipeline: function(userContext, options, done){
var nestedPromises = options.data.map.forEach(function(store, index){
return store.orders.map(function(order){
return new Promise(function(resolve, reject){
shopify.getPipeline(userContext, {'order':order,'storeId':index}, function(result){
var snapshotId = "30775bf1bb854c5d84c9c2af37bc8fb0";
var resourceToQuery = config.structrUrls.getUrl("ConfigurationSnapshot") + '/' + snapshotId ;
var requestOptions = {
method: "GET",
timeout: 8000
};
requestify.request(resourceToQuery, requestOptions)
.then(function(snapshotResult){
result.snapshots = snapshotResult.getBody().result;
result.snapshots.configurationPayload = JSON.parse(snapshotResult.getBody().result.configurationPayload);
resolve(result);
})
.catch(function(err){
reject(err);
});
});
});
});
});
// Flatten nested array.
var promises = Array.prototype.concat.apply([], nestedPromises);
Promise.all(promises).then(function(orderData){
done(null, orderData);
}).catch(function(err){
done(err);
});
}
格式接收一系列字符串(即包含多个以空格分隔的"a=x b=y c=z"
对的字符串)。
将此类字符串转换为key=value
形式的JSON对象的最佳方法是什么?
我打赌这是一个单线解决方案,但还没有设法找到它。
感谢。
答案 0 :(得分:2)
一种方法是将替换为
,
,将=
替换为:
:
var jsonStr = '{' + str.replace(/ /g, ', ').replace(/=/g, ': ') + '}';
或者如果您需要围绕键和值的引号:
var jsonStr2 = '{"' + str.replace(/ /g, '", "').replace(/=/g, '": "') + '"}';
JSON.parse()
如果你需要的话。
示例输出:
str: a=x b=y c=z
jsonStr: {a: x, b: y, c: z}
jsonStr2: {"a": "x", "b": "y", "c": "z"}
答案 1 :(得分:1)
这是一个简单的功能,可以解决这个问题
function stringToObj (string) {
var obj = {};
var stringArray = string.split(' ');
for(var i = 0; i < stringArray.length; i++){
var kvp = stringArray[i].split('=');
if(kvp[1]){
obj[kvp[0]] = kvp[1]
}
}
return obj;
}
答案 2 :(得分:0)
在John Bupit's excellent answer的基础上,我进行了一些进一步的改进,最终得到以下内容(正在解析的字符串位于message
中):
var json = JSON.parse(('{"' + message.replace(/^\s+|\s+$/g,'').replace(/=(?=\s|$)/g, '="" ').replace(/\s+(?=([^"]*"[^"]*")*[^"]*$)/g, '", "').replace(/=/g, '": "') + '"}').replace(/""/g, '"'));
基本上该计划如下:
replace()
:修剪任何前导或尾随空格 - 相当于trim()
replace()
:为完全丢失的任何值添加双引号(空字符串)(例如key1= key2=val
转到key1="" key2=val
)。replace()
:用", "
替换每个空格(用作分隔符),但不,其中空格在双引号内(即字符串值的一部分) )。replace()
:将每个=
替换为": "
{"..."}
""
(因为值字符串已用message
中的引号括起来),并带有单引号"
JSON.parse()
。上述方案应该处理缺失值,其中一些值被引用,一些未引用,并且值字符串中有空格,例如:类似于a= b="x" c="y y" d=z
。
答案 3 :(得分:0)
newstr = ""
for kvp in @value.split(" ")
newstr += kvp.replace(/=/,'":"').replace(/^/, '"').replace(/$/, '"').replace(/\"\"/,'" "')
newstr = newstr.replace(/\"\"/g, '","')
jsn = JSON.parse('{' + newstr + '}')
答案 4 :(得分:0)
假设您没有以该格式获得嵌套对象:
var sample = 'a=x b=y c=z';
var newobj = {};
sample.split(' ').forEach(function (value) {
var keypair = value.split('=');
newobj[keypair[0]] = keypair[1];
});
console.dir(newobj);
这样做是在每个空白区域上拆分并推送到数组,并且数组循环并且数组中的每个项目再次被拆分以获得分配给newobj的每个键值对。
答案 5 :(得分:0)
我创建了一个类似需求的简单在线工具:https://superal.github.io/online-tools/
用例:
传输从chrome网络请求(表单数据或查询字符串参数)或邮差标题键值(批量编辑样式)复制到json格式的键:值对。
例如:
key:值对
platform:2
limit:10
start_time:1521561600
end_time:1522080000
offset:0
到json格式
{
"platform": "2",
"limit": "10",
"start_time": "1521561600",
"end_time": "1522080000",
"offset": "0"
}
答案 6 :(得分:0)
可以使用这个 npm athena-struct-parser 包的帮助来解析(转换为 json)。
有关软件包的更多信息 -- https://www.npmjs.com/package/athena-struct-parser
示例 Nodejs 代码
var parseStruct =require('athena-struct-parser') ;
var str = '{description=Check the Primary key count of TXN_EVENT table in Oracle, datastore_order=1, zone=yellow, aggregation_type=count, updatedcount=0, updatedat=[2021-06-09T02:03:20.243Z]}'
var parseObj = parseStruct(str)
console.log(parseObj);
采用key=value格式的示例字符串
{description=Check the Primary key count of TXN_EVENT table in Oracle, datastore_order=1, zone=yellow, aggregation_type=count, updatedcount=0, updatedat=[2021-06-09T02:03:20.243Z]}
结果解析输出
{
description: 'Check the Primary key count of TXN_EVENT table in Oracle',
datastore_order: '1',
zone: 'yellow',
aggregation_type: 'count',
updatedcount: '0',
updatedat: [ '2021-06-09T02:03:20.004Z' ]
}