首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将此字符串转换为JSON对象?

如何将此字符串转换为JSON对象?
EN

Stack Overflow用户
提问于 2011-08-26 14:51:35
回答 4查看 2.2K关注 0票数 2

我有来自用户的以下字符串,需要将其转换为JSON。

代码语言:javascript
运行
复制
2r,5g|3b,2r,4y|3g

我想用JavaScript把它转换成JSON。下面是我想要的JSON的样子:

代码语言:javascript
运行
复制
rounds = { 
    "round" : {
        "interval" : {
            "time" : "2",
            "color" : "r"
        },
        "interval" : {
            "time" : "5",
            "color" : "g"
        }
    },
    "round" : {
        "interval" : {
            "time" : "3",
            "color" : "b"
        },
        "interval" : {
            "time" : "2",
            "color" : "r"
        },
        "interval" : {
            "time" : "4",
            "color" : "y"
        }
    },
    "round" : {
        "interval" : {
            "time" : "3",
            "color" : "g"
        }
    }
}

我真的不确定从哪里开始,所以任何帮助都是感激的!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-26 15:06:53

您可以使用以下代码:

代码语言:javascript
运行
复制
var strRounds = "2r,5g|3b,2r,4y|3g";
var roundsSplit = strRounds.split("|");

var rounds = {};

for (var i = 0; i < roundsSplit.length; i++){
    var intervalsSplit = roundsSplit[i].split(",");

    if (intervalsSplit.length > 0){
        rounds["round" + i] = {};
    }

    for (var j = 0; j < intervalsSplit.length; j++){
        rounds["round" + i]["interval" + j] = {
            "time": intervalsSplit[j][0],
            "color": intervalsSplit[j][1]
        };
    }
}

但是我不得不说,您编写的JSON是无效的,因为它的字段必须有唯一的名称。我用过像round0round1这样的名字。以及interval0等等。

票数 2
EN

Stack Overflow用户

发布于 2011-08-26 15:09:55

您提供的格式不是有效的JSON,因为您有多个相同密钥的实例。下面是一种更合理的尝试,通过使用数组而不是具有同一键的多个实例的对象:

代码语言:javascript
运行
复制
function userStringToJSON(userString) {
    var arrayOfRounds = userString.split("|").map(function (roundString) {
        return roundString.split(",").map(function (intervalString) {
            var time = parseInt(intervalString, 10) + "";
            var color = intervalString.substring(time.length);

            return { time: time, color: color };
        });
    });

    return JSON.stringify(arrayOfRounds);
}

然后userStringToJSON("2r,5g|3b,2r,4y|3g")给出字符串:

代码语言:javascript
运行
复制
[[{"time":"2","color":"r"},{"time":"5","color":"g"}],[{"time":"3","color":"b"},{"time":"2","color":"r"},{"time":"4","color":"y"}],[{"time":"3","color":"g"}]]

给出的对象数组的JavaScript数组

代码语言:javascript
运行
复制
[
    [
        { time: "2", color: "r" },
        { time: "5", color: "g" }
    ],
    [
        { time: "3", color: "b" },
        { time: "2", color: "r" },
        { time: "4", color: "y" }
    ],
    [
        { time: "3", color: "g" }
    ]
]

在较旧的浏览器中,您需要为map安装es5-shim,为JSON.stringify安装json2.js

票数 1
EN

Stack Overflow用户

发布于 2011-08-26 14:57:28

在"|“上拆分字符串以获得新一轮,然后在",”上拆分每个子字符串以获得该轮的间隔。

因此,您可以轻松地创建一个javascript映射,然后使用Map to JSON转换来获得所需的JSON。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7201019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档