2014-11-22 100 views
0

我想添加一个JSON对象中的字符串...字符串特殊字符转换为JSON字符串化非法令牌

// this var can have special characters like [], commas, quotes, double quotes, accents, colon, semicolon, question marks, and maybe some other characters... Example* 
var textArticle = "Le Lorem Ipsum; est simplement. Du [faux] texte, employé: dans la composition, et la mise? En pagão avant impression!"; 

// this var I'll get from a date object 
var hourArticle = "18:20"; 

JSON.stringify({ "hour": hourArticle }), 

当我只有JSON里面小时,它工作得很好,我可以使用:

var hourFinal = JSON.parse(json).hour; 

但是当我添加与textArticle的值的另一个入口,我得到“未捕获的SyntaxError:意外的标记非法”:

JSON.stringify({ "text": textArticle, "hour": hourArticle }), 
var textFinal = JSON.parse(json).text; 
Error Uncaught SyntaxError: Unexpected token ILLEGAL 
任何令牌我试着用JSON.parse,例如

有什么不对?我感谢任何帮助! 谢谢

更新#1: 我创建与科尔多瓦和jQuery移动web应用程序... JSON对象是一个本地通知插件:Kazter Local Notification ......我创建了通知传球json stringify,并从插件的onTrigger函数返回json对象。但是,我使用JSON.parse(JSON)...... 时得到了非法令牌插件是这样的

window.plugin.notification.local.add({ 
message: mainText, 
json: JSON.stringify({ "text": textArticle, "hour": hourArticle }), 
title: 'Title 1' 
}); 

谢谢你们

更新#2: 玉家伙,我发现了什么是怎么回事,有whas无关插件或科尔多瓦,或什么... textArticle VAR其从一个文本文件的随机行。像这样的值:

var filePath = "txt/datatexts.txt"; 
xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET",filePath,false); 
xmlhttp.send(null); 
var fileContent = xmlhttp.responseText; 
var fileArray = fileContent.split('\n') 
var randLineNum = Math.floor(Math.random() * fileArray.length); 
var textRandom = fileArray[randLineNum]; 
var textRandomParts = textRandom.split('#'); 
var textArticleFull = textRandomParts[0] + " " + textRandomParts[1] + " " + textRandomParts[2]; 
var textArticle = textArticleFull; 

但解决textArticle值时,它的输出是这样的:

var textArticle = "Le Lorem Ipsum; est simplement. Du [faux] texte, employé: dans la composition, et la mise? En pagão avant impression!\r"; 

我不知道为什么,但它把“\ r”的值.. 的末尾,再抛出非法令牌.. 因此,所有我必须做的是:

var textArticleOK = textArticle.replace("\r", ""); 
json = JSON.stringify({ "text": textArticleOK, "hora": hourArticle}); 
var textArticleParse = JSON.parse(json).text; 

那么......就是这样......有些事我应该知道? 我只是不知道为什么会发生这种情况,因为'\ r'在双引号内....而且我用'\ n'按行分割文本文件。 另外这是我的文本文件看起来像:

  1. 文本part1的#文本第2部分#文第三部分
  2. 文本part1的#文本第2部分#文第三部分
  3. 文本part1的#文本第2部分#文第三部分

它没有每行结尾处的'\ n',我必须添加那个吗?

非常感谢!

+1

它为我的作品:http://jsfiddle.net/vh5yakub/ – Oriol 2014-11-22 15:44:04

+0

感谢@Oriol寻找到的jsfiddle,效果真的不错... 我不知道为什么...我正在用cordova和jquery mobile创建一个web应用程序... json对象是一个本地通知插件...也许它有一些长度限制...我无法弄清楚发生了什么事情。 – Zembo 2014-11-22 16:00:02

回答

0

这个例子不抛出任何异常:

var textArticle = "Le Lorem Ipsum; est simplement. Du [faux] texte, employé: dans la composition, et la mise? En pagão avant impression!"; 
var hourArticle = "18:20"; 
var json = JSON.stringify({ "text": textArticle, "hour": hourArticle }); 
var textFinal = JSON.parse(json).text; 
+0

我看不到你提到的最后一个逗号......它在textArticle var中吗?谢谢@亚历山大 – Zembo 2014-11-22 16:01:09

+0

'JSON.stringify({“text”:textArticle,“hour”:hourArticle}),'以逗号结尾 – Alexander 2014-11-22 16:02:15

+0

哦,我明白了......我更新了帖子,你可以看看吗?我不能这样做,因为json之后还有另一个参数... – Zembo 2014-11-22 16:10:29