从 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 仅包含具有三个属性 Deals
、L1H
和 L2H
的对象数组,那么 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 文件格式只能生成一列类型变量或对象或数组