0

我正在制作这个小解析器,它本质上使 json 对象变得更容易输入字符串。如您所见,我有两个输入字段,我使用第一个作为表名,然后将下一个作为数据页。我开始非常简单,所以我知道这不适用于复杂的示例。那会晚点来的。我发现我缺少一些 {},但我稍后会添加。但基本上我的小解析器会吐出:

{pizzas:[
  size:"large";toppings:"sausage"; ]
}

但现在我很好奇,这在技术上是一个有效的 json 对象,对吧?我的意思是var“对象”。

这是el代码!

<!DOCTYPE html>
<html>
<head>

</head>
<body>
Input like:<br/>
    table: pizzas<br/>
    data: size:"large";toppings:"sausage";<br/>
<form name="form1" onsubmit="getString(); return false;">
    table name<input type="text" name="tableJob" id="tableJob" value='example: pizzas'><br/>
    data<input type="text" name="dataJob" id="dataJob" value='example: size:"large"; toppings:"sausage";'>
    <input type="submit" value="Submit">
</form>
<p id="myJson"></p>
<script>
    var w, x, y, z;
    function getString(){
        x = document.getElementById("tableJob").value; //get the table from user
        y = document.getElementById("dataJob").value; //get data from user
        var object = '<p>{' + x + ':[<br/>' + '&nbsp&nbsp' + y + '&nbsp]<br/>' + '}';   
        document.getElementById("myJson").innerHTML = object;   
    }

    //now add object to our json page

</script>
</body>

///////////////////////////////////////// //////////////////////////////////这是正确的方法:

<body>
Input like:<br/>
    table: "pizzas"<br/>
    data: "size":"large","toppings":"sausage",<br/>
<form name="form1" onsubmit="getString(); return false;">
    table name<input type="text" name="tableJob" id="tableJob" value='"pizzas"'><br/>
    data<input type="text" name="dataJob" id="dataJob" value='"size":"large", "toppings":"sausage,"'>
    <input type="submit" value="Submit">
</form>
<p id="myJson"></p>
<script>
    var w, x, y, z;
    function getString(){
        x = document.getElementById("tableJob").value; //get the table from user
        y = document.getElementById("dataJob").value; //get data from user
        var obj = '<p>{&nbsp' + x + '&nbsp:&nbsp[<br/>' + '&nbsp&nbsp{' + y + '}&nbsp]<br/>' + '}'; 
        document.getElementById("myJson").innerHTML = obj;  
        var myJsonString = 
        '{' + x + 
            ':[' + '{' + y + '} ]' +
        '}';

        alert(myJsonString);    
    }



</script>
</body>
4

2 回答 2

3

不,这不是有效的 JSON。[...]包含一个数组,该数组必须是一个以逗号分隔的元素列表。您的括号中有key:value对,它们用分号分隔。

你不使用有什么原因JSON.stringify()吗?

于 2013-08-16T06:19:26.503 回答
1

您拥有的第一个对象既不是有效的 JSON 对象,也不是有效的 JavaScript 对象字面量。

一个合适的 JavaScript 对象字面量应该是这样的:

var pizzas = {
  pizzas:[
  {size:"large",toppings:"sausage"} ], //Notice the enclosing curlys around size and toppings.
}

其次,您要返回的对象var object...将如下所示

"<p>{pizzas:[<br/>&nbsp&nbspsize:"large";toppings:"sausage"&nbsp]<br/>}"

未剥离的绝对不是对象,而是剥离了 HTML:

"{pizzas:[size:"large";toppings:"sausage"]}"

仍然不会产生有效的 JSON 对象并且工作JSON.stringify()也无济于事,因为数组不能保存您尝试插入的键值对。

将这些包装在对象文字中将修复它,见上文,还删除出现在数组中的分号。

于 2013-08-16T06:24:59.320 回答