4

我不确定 JSON 列表在解析为 javascript 对象时如何工作。但是我不习惯 javascript,所以我的问题和建议的解决方案可能包含愚蠢的错误。我有一个 JSON 文件,我必须从它构建一个表单,所以我用 jQuery .parseJSON 解析它以获得一个 javascript 对象。json文件如下:

{"Form": [{"Name":"Conan",
           "Description":"Adventure", 
       "Value":"Children Movie"}, 
      {"Name":"Sandocan",
       "Description":"Adventure",
       "Value":"Children Movie"},
      {"Name":"Terminator",
       "Description":"Sci-Fi",
       "Value":"Action Movie"},
      {"Name":"Iron Man",
       "Description":"Adventure",
       "Value":"Children Movie"}]}

从语法的角度来看,它应该是正确的。

处理它的代码在网页中,JSON 代码通过模板标签打印在页面中:{{line}}。我尝试将它分配给一个变量,但我仍然不确定代码是否真的处理它。但是页面的代码如下:

<html><script src="../jquery.js">
</script>
<body><p> Data previously inserted: {{line}}</p>
<form action="/myform/" method="post">Choose the movie you prefer:<br />
<script language=javascript>
var lin={{line}}
var obj=jQuery.parseJSON(lin);
function str_to_obj(o){ 
        document.write("Hello world");
        for(item in o.Form) {
                document.write(item.Name);
        };
}
str_to_obj(obj);
</script>
<input type="radio" name="title"><br />
<input type="text" name="description"><br />
<input type="submit" value="Submit">
</form></body></html>

萤火虫报告:

SyntaxError: invalid property id
var obj=jQuery.parseJSON({&quot;Form&quot;: [{&quot;Name&quot;:&quot;Conan&quot;

我在做一些愚蠢的事情,我敢肯定,但我必须让它发挥作用。

4

3 回答 3

3

既然你用 jQuery 标记了它,为什么不做这样的事情(假设你想要将项目表示为单选按钮):

要使用以下方法获取 json 文件$.ajax

$.ajax({
    url: 'file.json',
    dataType: 'json',
    success: function(data){
        //manipulate the parsed json here ('data')
    }
});

没有 ajax 调用的“硬编码”示例:

var objectFromJson = $.parseJSON('{"Form": 
    [{"Name":"Conan","Description":"Adventure", "Value":"Children Movie"},
     {"Name":"Sandocan","Description":"Adventure","Value":"Children Movie"},
     {"Name":"Terminator","Description":"Sci-Fi", "Value":"Action Movie"},
     {"Name":"Iron Man","Description":"Adventure","Value":"Children Movie"}]}');

$(function(){

    $.each(objectFromJson.Form, function(k, v){

        var $radio = $('<input/>')
                        .prop({ type: 'radio', id: v.Name, name: 'form' })
                        .val(v.Value),
            $label = $('<label />')
                        .prop({ 'for': v.Name })
                        .text(v.Name)
                        .prepend($radio);

        $('form[action="/myform/"]').append($label);
    });

});

小提琴

于 2013-07-18T13:52:45.540 回答
1

我认为问题在于“ 在您的 JSON 字符串中,这将使其无效。

如果您使用真实引号jsonString.replace(/&quot;/g,'"');替换所有's。&quot;

有关示例,请参见此 js fiddle 。

于 2013-07-18T14:00:10.573 回答
0

I would do it this way :

Make an ajax call to fill var data with json.

var data = '{"Form": 
    [{"Name":"Conan","Description":"Adventure", "Value":"Children Movie"},
     {"Name":"Sandocan","Description":"Adventure","Value":"Children Movie"},
     {"Name":"Terminator","Description":"Sci-Fi", "Value":"Action Movie"},
     {"Name":"Iron Man","Description":"Adventure","Value":"Children Movie"}]}';
var obj = [];
$.each(data.Form, function(key,value) {
   var tmpObj = {};
   $.each(value, function(key2,value2){
       tmpObj[key2] = value2;
   });     
   obj.push(tmpObj);
});

This way you can use obj when you need to like this :

obj[0].Name // Conan
obj[0].Value // Children Movie
obj[1].Description // Adventure
于 2013-07-18T16:43:29.000 回答