Javascript 将JSON对象分配给数据字段

Javascript 将JSON对象分配给数据字段,javascript,jquery,json,Javascript,Jquery,Json,我正在使用javascript动态创建一行,下面是代码: var row2 = "<tr><td><a href='#editModal' class='modal_trigger' data-info="+name+" data-toggle='modal'>Edit</a></td></tr>"; 有办法解决吗?这里有一些建议: 不要使用var作为变量名,即使在示例中也是如此(实际代码甚至不会编译) 请确保您理解什么

我正在使用javascript动态创建一行,下面是代码:

var row2 = "<tr><td><a href='#editModal' class='modal_trigger' data-info="+name+" data-toggle='modal'>Edit</a></td></tr>";
有办法解决吗?

这里有一些建议:

  • 不要使用
    var
    作为变量名,即使在示例中也是如此(实际代码甚至不会编译)
  • 请确保您理解什么是JSON,因为Javascript对象!=JSON。显然,在本例中,
    var
    是一个JS对象
也就是说,您可以使用
JSON.stringify(variable)
,将任何不包含函数的JS对象转换为JSON字符串:

更新:这就是我的意思:

var row2 = '<tr><td><a href="#editModal" class="modal_trigger" data-info="'+
        name+'" data-toggle="modal">Edit</a></td></tr>';
var row2='';

(注意使用引号进行的更改)

请使用
JSON.stringify(yourVar)

var-row2=“”;

如果您得到
[object object]
则它不是JSON,而是一个对象。
是一个字符串,包含一个序列化的对象,它被用作轻量级数据交换格式

尝试将对象序列化为JSON

"...data-info=" + JSON.stringify(myVar||null) + " data..."

在这里,我向
null
添加了强制,以防止变量不包含数据时出错。

名称
变量存储在某个映射或数组中,将id或索引存储在行中,然后使用此命令将其取回:

// using a mapping :
var infoMapping = {};

function createRow (name) {
    // this will work if 'id' is a key which identifies the object
    infoMapping[name.id] = name;
    var row2 = "<tr><td><a href='#editModal' ... data-infoid="+name.id+" ... ";
    // etc ...
}

function editModal (nRow) {
    var infoid = $(nRow).attr('data-infoid');
    var name = infoMapping[infoid];

    // use name ...
}
//使用映射:
var infoMapping={};
函数createRow(名称){
//如果“id”是标识对象的键,则此操作有效
infoMapping[name.id]=名称;
var row2=“
var x={a:10,b:20};
var html=“”;
结果是



@kornieff,刚刚尝试过:这将导致
数据信息=“{”id:”=6,==”…}
您的
名称变量的内容是什么?显然它不仅仅包含一个名称。添加
控制台.log(名称)
就在您的代码行之前,告诉我们控制台上打印的内容。@LeGEC,发布了JSON对象。您可以使用JSON.stringify将其放入数据对象中,然后在需要时使用JSON.parse将其转换回。@Namit,data info='{“id”:“10”}“。只需使用单引号。
var
只是这里的一个示例。此外,我尝试了
JSON.stringify
,结果是:
data info=“{”id“:7,“author_name:“Test”“User”…}
这是JSON!。现在您可以创建一个JS对象,只需执行相反的步骤:
JSON.parse(myJsonString)
No,正如我所说,它接受一个JSON字符串,并返回一个JS对象。我认为这里有些混乱。我已经有了一个对象,使用stringify生成结果-
data info=“{”id“:7,“author_name”:“Test”“User”…}
哪一个不正确。为什么不正确?不能将JS对象设置为标记的属性值,它必须是字符串。使用
JSON.stringify(myVar |{})可能更好
我使用了
null
,因为如果myVar是
未定义的
或不包含数据,当解析到对象时,它应该反映空数据,并且对象
{}
在被强制时被评估为
true
,相比之下
null
不表示任何数据。考虑:
如果({})//->true
,相反:
if(null)//->false
使用
{}
可以避免潜在的空引用错误(这取决于OP试图做什么,他不是很清楚)是的,在语义上,
null
不表示任何数据,但为了一致性和防止类型错误,使用空对象是一种好方法
。谢谢你的建议@royhowiecoull请在这里详细说明一下。@Namit:你在问题中提到了一些模态,你如何在模态中使用
数据信息
?模态打开后,我试图访问存储在
数据信息
中的对象@Namit:
数据信息
属性是一个字符串。你可以存储对象的序列化版本(如其他人所建议的),但您需要以某种方式转义
字符。另一种方法(我建议)是将对象的id存储在
数据信息中,并在需要时使用此id检索对象。
"...data-info=" + JSON.stringify(myVar||null) + " data..."
// using a mapping :
var infoMapping = {};

function createRow (name) {
    // this will work if 'id' is a key which identifies the object
    infoMapping[name.id] = name;
    var row2 = "<tr><td><a href='#editModal' ... data-infoid="+name.id+" ... ";
    // etc ...
}

function editModal (nRow) {
    var infoid = $(nRow).attr('data-infoid');
    var name = infoMapping[infoid];

    // use name ...
}
var x = {a:10, b:20};
var html = "<div data-info='" + JSON.stringify(x) + "'></div>";