首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript解析: JSON到Javascript对象

JavaScript解析: JSON到Javascript对象
EN

Stack Overflow用户
提问于 2012-12-02 01:53:32
回答 3查看 130关注 0票数 0

嗨,我是JavaScript的新手,我对如何处理像下面这样的对象感到有点困惑。如何将其转换为数组pt,其中每个条目都具有属性selid x,y,z?

这就是我在Chrome控制台中看到的:Object {pt[2][y]: "1.3571934700012207", pt[0][selid]: "2", pt[0][z]: "0", pt[3][x]: "3.6684491634368896", pt[2][z]: "0"…}

如果我尝试访问pt,如下例所示:

代码语言:javascript
复制
var X = pt[2].x;

I get和错误"Cannot read property of undefined“。我假设这是因为这个对象更像是一个字典,键是"pt2“,值是"1.3571934700012207”。然而,我想像数组pt一样访问它,它的对象具有属性x,y,z,selid。有没有办法将数据转换/解析成我想要的格式?在此之前非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-02 02:26:46

你在评论中说过,你做console.log(data)是为了获取obj内容。所以也许你应该这么做

代码语言:javascript
复制
var X = data["pt[2][x]"];

如果你想把它转换成数组pt,你应该这样做:

代码语言:javascript
复制
var data = {
    "pt[0][x]" : 1, 
    "pt[1][x]" : 2, 
    "pt[2][y]" : 3, 
    "pt[2][z]" : 3
};

var pattern = /^pt\[([^\]]+)\]\[([^\]]+)\]$/i ;

var pt = [];
for( var key in data ){

    if ( pattern.test(key) ){
        var m = key.match(pattern);
        if( !pt[m[1]] ) pt[m[1]] = {};
        pt[m[1]][m[2]] = data[key];
    }
 }

alert(pt[0].x)
票数 3
EN

Stack Overflow用户

发布于 2012-12-02 02:58:47

这是可怕的不可读,所以我为此道歉。

但是你可以试试这个:

代码语言:javascript
复制
var v = {pt:new Array()};
for(var a in data) eval("if(!v." + /pt\[\d+\]/.exec(a) + ") v." + /pt\[\d+\]/.exec(a) + " = {}; v." + a.replace(/\]\[/,"][\"").replace(/\]$/,"\"]") + " = " + data[a]);

那么v应该有你想要的东西。

(它只是创建/执行以下几行代码:

代码语言:javascript
复制
if(!v.pt[2]) v.pt[2] = {}; v.pt[2]["y"] = 1.3571934700012207
if(!v.pt[0]) v.pt[0] = {}; v.pt[0]["selid"] = 2
if(!v.pt[0]) v.pt[0] = {}; v.pt[0]["z"] = 0
if(!v.pt[3]) v.pt[3] = {}; v.pt[3]["x"] = 3.6684491634368896
if(!v.pt[2]) v.pt[2] = {}; v.pt[2]["z"] = 0

)

票数 1
EN

Stack Overflow用户

发布于 2012-12-02 03:36:22

答案已经选择,但这里是原始请求格式的JSON表示法

代码语言:javascript
复制
var pt=[
  {x:0,y:1,z:2,strid:"string"},
  {x:5,y:5,z:5,strid:"string2"}
];

所以现在你可以像这样做你的循环:

代码语言:javascript
复制
for(i=0;i<pt.length,i++){
  alert("x is:"+pt[i].x+" y is:"+pt[i].y+
       " z is:"+pt[i].z+" strid is:"+pt[i+].strid)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13662057

复制
相关文章

相似问题

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