从 JSON 对象/字符串或 Java 脚本变量中删除开头和结尾的双引号?

Posted

技术标签:

【中文标题】从 JSON 对象/字符串或 Java 脚本变量中删除开头和结尾的双引号?【英文标题】:Remove Double Quotes at Begin & End from JSON Object/String or Java script Variable? 【发布时间】:2013-09-01 03:31:54 【问题描述】:

我从 servlet 获取对象的 JSON 数组,并尝试在 java 脚本中填充表控件。

这是我的代码,出于某种原因,它在开头和结尾添加了双引号,表格控件不接受用于填充值。如何删除开头和结尾的双引号。

 aData = ["A":"one","B":"Two","C":"Three","D":"8","E":"No","F":"Business","G":"0",
 "L1H":"Analytics","A":"ones","B":"Twos","C":"Threes","D":"85","E":"Nos",
 "F":"BusinessD","G":"0","L1H":"AnalyticsM"]

 var oModel = new sap.ui.model.json.JSONModel();
 oModel.setData(modelData: aData);
 var oTable=sap.ui.getCore().byId("id1");
 oTable.setModel(oModel);
 oTable.bindRows("/modelData"); // This static code of aData is working fine in
                                // my Table   control of html page.

 //Here, i Wanted to get values dynamically from servlet and populate it in Table.
  var global;
  $.get('someServlet', function(data)  
 var abc, xyz;
for(var i=0;i<(data.length);i++)
 abc=''+'\"A\":'+'\"'+data[i].A+'\"'+','+'\"B":'+'\"'+data[i].B+'\"'+',
 '+'\"C\":'+'\"'+data[i].C+'\"'+','+'\"D\":'+'\"'+data[i].D+'\"'+',
 '+'\"E\":'+'\"'+data[i].E+'\"'+','+'\"F\":'+'\"'+data[i].F+'\"'+',
 '+'\"G\":'+'\"'+data[i].G+'\"'+','+'\"H\":'+'\"'+data[i].H+'\"';   
        if (xyz===undefined)
            xyz=abc;
        else                
        xyz=abc+','+xyz;
            global = xyz;
        
        global="["+global+"]";
        var oModel = new sap.ui.model.json.JSONModel();
        oModel.setData(modelData: global);
        var oTable=sap.ui.getCore().byId("id1");
        oTable.setModel(oModel);
        oTable.bindRows("/modelData");

    );
     //global="["A":"one","B":"Two","C":"Three"...]"
     //alert(global);  Displaying without double quotes as expected.
     //when I see the value in Chrome debugger double quotes are appearing at begin&End

所以最后我在全局变量中的值是双引号。

//global="["A":"one","B":"Two","C":"Three","D":"8","E":"No","F":"Business","G":"0","L1H":"Analytics",

"A":"ones","B":"Twos","C":"Threes","D":"85","E":"Nos","F":"BusinessD ","G":"0","L1H":"AnalyticsM"]"

如何在这个 resultSet JSONArray 对象的开头和结尾去掉这个双引号?如果我放了警报,它会显示没有双引号。当我在 Chrome 调试器中看到这个全局变量时,它用双引号显示并且无法在表格控件中填充值。我的代码在将值填充到表控件中时遇到了一些困难,这些值来自 JSON 格式/字符串/数组的 Servlet。请帮忙。

感谢任何输入和帮助。

【问题讨论】:

所以看起来你的 ajax 返回了 json,但是你试图去掉除了三个属性之外的所有属性,所以你正在手动构建 json 字符串,并试图将它传递给一个函数?对吗? 哇。我没有意识到那是他在做什么。这很愚蠢。 可以使用stringify将json转成字符串。 【参考方案1】:

La forma Correcta de eliminar las comillas es con

var obJason = eval( dataString );

var obj= "["ID":"786-000X-XX8","NAME":"LISANDRO ARCILES"]";

应用程序eval()

obj= eval( obj);

lo tranforma al obejeto deseado de tipo Json

【讨论】:

请用英文发帖【参考方案2】:

试试这个:

var myJSON = eval( data );

其中 data 是服务器发送的字符串。 eval 函数完成工作,将字符串解析为 JSON。

【讨论】:

【参考方案3】:

您可以在最后调用JSON.parse 将您的字符串解析为一个对象,即:

global=JSON.parse("["+global+"]");

但是,与其在运行中为自己构建一个 JSON 字符串然后对其进行解析,不如设置 var global = []; 并在你的 for 循环中执行以下操作可能更简单:

global.push( 
    Deals: data[i].Deals, 
    L1H: data[i].L1H, 
    L2H: data[i].L2H 
);

您是否尝试过以下方法?

$.get('someServlet', function(data)  
    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData(modelData: data);
    var oTable=sap.ui.getCore().byId("id1");
    oTable.setModel(oModel);
    oTable.bindRows("/modelData");
);

【讨论】:

这就是我在 servlet response.getWriter().print(jsonArray); 的 doGet 方法中所拥有的。当我做警报(数据)时,得到诸如 [object, Object],[object, Object],[object, Object 对,因为 data 是一个对象数组,应该足以填充表格控件(取决于您使用的方式或内容)。如果您想要数据的文本表示,您可以使用 alert(JSON.stringify(data));,但如果我们的答案都没有帮助您,那么我们可能会误解您遇到的问题。 好的。我很抱歉让你感到困惑。让我换一种说法。 我收到这种格式的错误,例如 Uncaught TypeError: Cannot call method 'push' of undefined【参考方案4】:

您的 global 变量是 JSON 字符串。您不需要构造字符串。据我所知,data 已经是一个 javascript 对象。我想这就是你想要的:

var global;    
$.get('someServlet', function(data) 
    global = data;
    populateTable(global);  // You could just as easily pass the data variable here
);

【讨论】:

我可以用静态数据填充表,例如 global=["A":"one","B":"Two","C":"Three","D ":"8","E":"否","F":"商业","G":"0","L1H":"分析", "AB":"one","BC ":"二","CD":"三","DF":"8","EG":"否","FZ":"商业","GM":"0","L1H": "Analytics" ] 当我从数据中获取这个全局变量的值时,它失败了。我怎样才能做到这一点? 在上面的示例中,您应该能够在设置全局变量后立即调用该函数来填充该表。我编辑了我的示例以说明我的意思。 这失败了。当我将全局直接分配给表格控件时,出现错误。当我喜欢这个 global = ["A":"one","B":"Two","C":"Three","D":"8","E":"No"," F":"Business","G":"0","L1H":"Analytics","AB":"one","BC":"Two","CD":"Three"," DF":"8","EG":"No","FZ":"Business","GM":"0","L1H":"Analytics"];填充(全局),它正在工作 请将console.log(data); 放入$.get 回调函数中。它在控制台中显示什么? [对象,对象],[对象,对象],[对象,对象],[对象,对象],[对象,对象],[对象,对象]....【参考方案5】:

不要自己构建或解析 json。有一些方法可以为您做到这一点。

如果您返回的 json 仅包含具有三个属性 DealsL1HL2H 的对象数组,那么 data 就是您想要的。如果返回的 json 有更多属性,而您只想要这三个,请改为:

function(data) 

    var arr = $.map(data, function(item, idx) 
        return 
            Data: item.Data,
            L1H: item.L1H,
            L2H: item.L2H
        ;
    );

【讨论】:

感谢您的所有回复。实际上,我正在将 JSON 数组格式的数据库结果集传递给 servlet。这是我传递给 servlet 的 JSON 数组。["A":"one","B":"Two","C":"Three","D":"8","E" :"No","F":"Business","G":"0","L1H":"Analytics", "AB":"one","BC":"Two","CD" :"Three","DF":"8","EG":"No","FZ":"Business","GM":"0","L1H":"Analytics" ]。这意味着,从 JDBC 程序返回的行数。 如果我在代码中不自己解析,就会报错。 我以其他方式重申了我的问题。有人能再看看我的担忧吗?【参考方案6】:

由于您使用的是 jQuery,请尝试http://api.jquery.com/jQuery.parseJSON/,它会改为返回一个对象。

【讨论】:

以上是关于从 JSON 对象/字符串或 Java 脚本变量中删除开头和结尾的双引号?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?

SQL 编译错误:从 S3 复制到 Snowflake 时,JSON 文件格式只能生成一列类型变量或对象或数组

工作技能Json 数据处理常见问题梳理

从json字符串中提取变量

Java 如何在 dynamodb 中存储 JSON 对象或 JSON 数组而不将其转换为字符串?

json中load和loads区别