【问题标题】:How can I convert my JSON string to a JavaScript Object Literal如何将我的 JSON 字符串转换为 JavaScript 对象文字
【发布时间】:2014-10-02 15:07:29
【问题描述】:

我正在使用 jqGrid,目前我遇到了一些问题,主要是因为它的配置。

目前我想这样做:

    var tableConfigJson = $treeTable.getMappedJson();

    jQuery(function() {
        jQuery("#grid").jqGrid(tableConfigJson);
    });

$treeTable 是我在服务器端使用速度映射检索的对象。

现在我从服务器获取的 JSON 很好,但是当我将它传递给 jqGrid 为其设置配置时,它不起作用。如果我在 javascript 中设置了配置,但我将配置创建为 javascript 对象,它可以正常工作,但是如果我只是将 JSON 作为配置传递,它就不起作用。现在我的问题是,有没有一种简单的方法可以解决这个问题?还是我需要使用 JSON 再次映射配置。

如果我这样做:

jQuery(function() {


jQuery("#grid").jqGrid({
    treeGrid: true,
    treeGridModel: 'adjacecncy',
    ExpandColumn: 'name',
    datatype: "local",
    mtype: 'Get',
    colNames: ['id','Name','MenuId','Menu Name'],
    colModel: [
        {name:'RowId',index:'RowId',width:300,fixed:true},
        {name:'Name',index:'Name',width:300,fixed:true},
        {name:'MenuId',index:'MenuId',width:300,fixed:true},
        {name:'MenuName',index:'MenuName',width:300,fixed:true},
    ],
    root:[
        {id:"1",Name:"Main Menu", MenuId:"1",MenuName:"Menu1"},
        {id:"2",Name:"Main Menu1",MenuId:"2",MenuName:"Menu2"},
        {id:"3",Name:"Main Menu2",MenuId:"3",MenuName:"Menu3"}
    ],
    pager: '#dvtreegridsamp',
    Caption: 'example'
)};

然后就可以了。

更新:

这是我的对象在控制台中的输出,但我想我现在知道问题可能出在哪里了。

Object {datatype: "local", data: Array[3], colNames: Array[2], colModel: Array[2], height: "auto"…}ExpandColumn: "id"
caption: "I am SAD"
colModel: Array[2]0: Object1: Objectlength: 2__proto__: Array[0]colNames: Array[2]
data: Array[3]
datatype: "local"
height: "auto"
sortname: "id"
treeGrid: "true"
treeGridModel: "adjacency"
treedatatype: "local"

问题在于用于配置的参数在某些地方被解析为数组对象,而不是 JSON 样式的字符串。所以这些参数被忽略了。我需要这些是 JSON 样式,然后一切正常。

如果我需要澄清任何事情,请告诉我,已经晚了,我喝了很多咖啡。

【问题讨论】:

  • 那部分工作正常,速度很酷:)。
  • 让我编辑代码以免误导
  • 好吧,如果你这么说的话。你当时没有解释的是它是如何“不起作用”的。是否报告了错误?您是否尝试了一些console.log() 电话来查看发生了什么? tableConfigJson 真的是一个对象还是一个字符串?
  • 如果我只是将tableConfigJson 传递给我的函数,基本上会发生什么,它可以工作但只是有点。它没有设置所有的配置,我假设它是因为它们是双引号的,这与使用单引号的普通 java 对象不同。
  • 双引号和单引号完全没有区别。两者都被解析为字符串,事后无法判断字符串常量是用一种引号还是另一种。

标签: javascript jquery json jqgrid


【解决方案1】:

如果 tableConfigJson 当前是 JSON 字符串,就像你建议的那样,那么你只需要解析它:

jQuery("#grid").jqGrid(JSON.parse(tableConfigJson));

如果您是need it to work in older browsers,则需要包含a shim

【讨论】:

  • 这绝对有可能。
  • 当我尝试解析它以获取 JS 对象时,它会抛出一个错误,当您已经有一个 JS 对象时会发生这种错误。当 JSON 已经被解析时,错误是“意外的令牌 o”。
  • @Daniel 没错,听起来你已经有了一个对象。添加console.log(tableConfigJson),它将整个对象记录到the browser console——并将其包含在您的问题中!听起来它与您尝试并成功的文字对象在某种程度上有所不同。
  • 为了安全起见,console.log(typeof tableConfigJson);
  • 我赞成并接受它,因为查看控制台日志可以帮助我找出问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2016-10-09
  • 2018-01-06
  • 1970-01-01
相关资源
最近更新 更多