我看到一些例子,对于json对象的生成都是先拼凑成一段string,然后用 eval()函数生成json对象。但是如果我一开始有一个json对象,var example = 
{
  x:2 
}可否改变为:var example = 
{
  x:2,
  y:1 
}
//或者如下之类的?
var example = 
{
  x:2,
  z:[{abc:"deg"},{ifb:"asdf"}] 
}
能不能这样直接修改 json 对象?

解决方案 »

  1.   

    var orijson={x:1};
    function json2str(o) {
                 var arr = [];
                 var fmt = function(s) {
                     if (typeof s == 'object' && s != null) return json2str(s);
                     return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s;
                 }
                 for (var i in o) arr.push("'" + i + "':" + fmt(o[i]));
                 return '{' + arr.join(',') + '}';
             }
    var newjson = json2str(orijson).substr(0,json2str(orijson).length-1);
            newjson+=",y:2,z:{a:3,b:4}"+"}";
            window.onload=function(){
        alert(eval("("+newjson+")").x);
        alert(eval("("+newjson+")").y);
        alert(eval("("+newjson+")").z.a);
    }
      

  2.   

    其实我的意思是不用eval()函数的, 今天搜了一下,发现这样可以。var test =
    {
     x:1,
     y:[]
    }
    var aa = 
    {
     bb:123
    }test["z"] = "adfd";
    test["y"][0] = aa;//则 test将变成:
    var test =
    {
     x:1,
     y:[{bb:123}],
     z:adfd
    }
      

  3.   

    当然可以啊,你多看看javascript的基本语法,里面讲的很清楚.数据可以像数组一样下标索引,也可以['']这样,还可以.的形式,别的我也不知道了,反正就是没有的属性就添加,有的属性就更改,很灵活.
      

  4.   

    var a=[];var a1={};
    a1.abc='deg';
    a.push(a1);
    var a2={};
    a2.ifb='asdf';
    a.push(a2);
    example.z=a;
      

  5.   

    eval()这个东西,是千万不能用的。
    比较官方的javascript的规范中提到:eval 是恶魔,eval是JavaScript中最容易被滥用的方法。避免使用它。至于ajax操作返回的json字符串,可以使用官方网站提供的解析器json_parse.js运行。
    http://www.json.org/json_parse.js
      

  6.   

     避免使用eval(),从后台传个数据对象到前台一般怎么传呀?不用Ajax的 我现在还是在后台组织成json格式的string,扔给前台,然后又是一个eval()。。汗。。 还有eval()有什么坏处呀?有人说它执行慢 ?
      

  7.   

    可以啊,eval实行慢啊,会另外起一个js编译器进行代码分析,当然会慢