【问题标题】:error while using JSON.parse() in JavaScript在 JavaScript 中使用 JSON.parse() 时出错
【发布时间】:2015-08-29 09:12:22
【问题描述】:

我有以下 JSON 格式的数据,我想用 JavaScript 解析。

{"id":"897868990272958","posts":{"data":[{"id":"897868990272958_965738636819326","message":"As you are now aware, Federal elections have to be financed by personal donations only. To support my campaign, there is still tickets for my cocktail of Aug.27. at Balmoral's Community center. A 75% tax credit will be given for the net value of the ticket after expenses (+/- 33,75$ back into your pockets).\n\nComme vous le savez, les élections fédérales ne sont financées que par des dons personnels. Afin d'encourager ma campagne, il reste toujours des billets pour le cocktail du 27 août au centre communautaire de Balmoral. Un crédit d'impôt de 75% vous sera retourné sur la valeur net du billet après dépenses (+/- 33,75$ de retour dans vos poches).\n\nTo reserve tickets/pour réserver des billets: 753-6121.","comments":{"data":[{"id":"965738636819326_966081753451681","message":"je t'encourage mon rene mes indisponible ce soir"}],"paging":{"cursors":{"after":"MQ==","before":"MQ=="}}}},{"id":"897868990272958_965083470218176","message":"Hier, Haut-Madawaska !\n\nVisite d'entreprises et quelques poignées de mains à Clair et Baker Brook.  Une visite éclaire à Saint-Hilaire et Edmundston puis, en soirée, rencontre avec le conseil municipal du Lac Baker.  Le Haut-Madawaska est un exemple d'entrepreneurship  et d'esprit d'initiative.  Le chômage y est à zéro et on manque de travailleurs.   Pas besoin d'envier la Beauce.  À preuve, cette Coopérative qui vient de naitre à Clair et dont l'objectif ultime est de créer de l'emploi à partir de nos ressources à portée de main, et de miser sur la transformation.  Bravo à tous ces convaincus et bénévoles qui ne jurent que par le mouvement coopératif et l'esprit communautaire.\n\nBravo aussi au conseil municipal et au maire suppléant du Lac Baker pour leur dévouement et l'énergie qu'ils mettent à protéger et développer ce bijoux de village.\n\nÀ entendre les gens que nous croisons, dans la rue ou dans les usines, nous recevons une oreille très attentive au Plan des libéraux, relativement à la classe moyenne.  Il ne fait aucun doute, le vent tourne !"},{"id":"897868990272958_962429560483567","message":"Venez me rencontrer pour un cocktail !!!\nPour réserver votre billet, communiquez avec nous au quartier général libéral au 753-6121 (15 rue water, Campbellton NB)\n****************************************\nCome and meet me for a cocktail !!!\nTo reserve your tickets, please contact us at the liberal campaign office at 753-6121 (15 Water street, Campbellton NB)"},{"id":"897868990272958_961763833883473","message":"Hier, 18 août, visite de deux conseils municipaux coup sur coup !\n\nD'abord Balmoral. Comme d'autres municipalités de taille équivalente que j'ai déjà rencontrées, un conseil maitrisant ses dossiers avec des projets responsables et raisonnables à portée de réalisation. Il ne manque que la collaboration du fédéral qui n'est que trop absent. Bravo pour ce dynamisme.\n\nEnsuite Dalhousie. Comment ne pas lever son chapeau au maire Tremblay et ses conseillers et conseillères. Ils se battent pour notre petite ville du Restigouche-Est qui a subi des pertes de revenus «drastiques» suivant la fermeture du moulin et celle du plan thermique d'ÉNB. They are facing big challenges and they will have difficult decisions to take. We know the town's council will take those decisions in the best interest of it's community in mind. I will be there with an attentive ear to support their projets."},{"id":"897868990272958_961114093948447","message":"Aujourd'hui, Saint-Léonard au Rendez-vous des artistes !\n\nGrosse chaleur d'été, de beaux tableaux, de belles sculptures, des artistes extraordinaires et des gens qui nous laissent toujours entendre que... le vent tourne ! Je suis revenu à la maison avec ce tableau de circonstance en cette fin de semaine du 15 août. Merci à l'artiste-peintre Péruse. Surtout, toutes nos félicitations aux bénévoles qui ont encore fait un succès de ce rendez-vous des artistes.\n\nWarm day at «Le rendez-vous des artistes\". We saw beautiful paintings, sculpturs, and talked with interesting artists. And how pleasant it was to meet people. They surely let us know that the tide is turning ! I came back home with this beautiful painting right on the point for the ending weekend of the Acadian day. Thanks to artist-painter Péruse. Also, congratulations to all volunteers that made this artists gathering a success."}],"paging":{"previous":"https://graph.facebook.com/v2.4/897868990272958/posts?limit=5&fields=comments.limit%2815%29%7Bcomments%7Bmessage%7D,message%7D,message&since=1440606601&__paging_token=enc_AdD9KfoIkGsvwvKGKPHUvyEPbhuF2RoK63BKHTPw7tovNNMLZAZApH668RXKwpdMnnp7D6psZAc7wZAh0DlYIFoNPsjXjzfML0qyh30Oasasv9pyZAAZDZD&__previous=1","next":"https://graph.facebook.com/v2.4/897868990272958/posts?limit=5&fields=comments.limit%2815%29%7Bcomments%7Bmessage%7D,message%7D,message&until=1439765409&__paging_token=enc_AdDayGW6NPPTZA7gGT2HgRGZAVqinlc7ijLdPwYbZBexBpuBejfIzGdM42uW1GbO8epju5j8dDNv8qJ1lY8SMLZBZBQ3J0cIywdzQclw8KmqXv8HWlgZDZD"}}}

当我使用 Google Chrome 的控制台执行此操作时,它给了我一个错误。我想写以下几行:

var json = MY_DATA;
JSON.parse(json);

但是当我想将我的数据分配给json 时,控制台会出现以下错误

Uncaught SyntaxError: Unexpected identifier(…)

有什么问题?

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    看起来您的 JSON 已被解析为一个对象。然后你尝试再次解析它,它很困惑。

    这是一个很常见的错误。

    jQuery 中的一些功能会自动解析 JSON,不需要明确告知。

    【讨论】:

    • 好的!那么我对解析的定义可能是错误的!实际上,我需要的是我想要一个对象,假设一个数组包含我的 JSON 数据中的所有 (variable, value) 对。这在 JavaScript 中可行吗?
    • 那么如何创建这样的对象呢?我很抱歉,但老实说,我不明白为什么我得到了错误!!?我只有一个 JSON 格式的字符串(我在问题中提到的那个) - 如何让一个对象包含该字符串的(变量,值)对?我应该自己解析字符串还是 JavaScript 中已经有库可以为我解析?
    【解决方案2】:

    @Adosi 已经正确回答了这个问题,但我添加了一个示例,因此无论如何我都会将其包含在内,因为它对于评论来说太长了。将此添加到您的代码中并打开浏览器的控制台。

    console.clear();
    
    // your original data
    var json = MY_DATA;
    console.info("var json is a", typeof json);
    console.log('json.id:', json.id); 
    
    // when json is stored as a string, it needs to be parsed.
    // let's convert it back into a string and see what happens
    var json_needing_parsing = JSON.stringify(json)
    console.info("var json_needing_parsing is a", typeof json_needing_parsing);
    console.log('json_needing_parsing.id:', json_needing_parsing.id); //undefined
    
    // That didn't work. Let's parse it.
    var json_parsed = JSON.parse(json_needing_parsing);
    console.info("var json_parsed is a", typeof json_parsed);
    console.log("json_parsed.id:", json_parsed.id);
    

    它正在发挥作用。 http://jsfiddle.net/qn9xkt7c/(因为 Stack Snippet 编辑器因为巨大的 json 对象而对我发火)

    【讨论】:

    • 感谢您的解释。但是我的问题是我无法将我在问题中提到的字符串分配给变量json...浏览器给了我一个错误(我在问题中提到的那个)-我的问题是我无法分配我的价值到json 变量。为什么会这样?
    • @Suo6613 制作 Stack Snippet 或 JSFiddle 来演示问题?刚刚添加了一个指向 JSFiddle 的链接,它可以正常工作,所以您的代码可能还有其他问题?
    • 哇!在您提供的链接中,您没有用双引号将 MY_DATA 的值括起来!!为什么?当我将数据放在双引号中时,它给了我一个错误!我不应该把json格式放在双引号里吗?!
    • 通过在MY_DATA 周围添加引号,var json = "MY_DATA"; 将变量json 设置为等于文本字符串"MY_DATA",而不是存储在变量MY_DATA 中的任何内容。把它放到你的控制台中,然后添加console.log( typeof json ); console.log( json.split('_') );,你会看到它是一个字符串。
    • 对于它的价值,如果您将其放入 JSFiddle 中,您将几乎立即回答,因为许多人会立即发现您的报价问题。这很容易做到,如果你不熟悉它,决定花 5 分钟熟悉它!它会很快给你回报:jsfiddle.net。额外的好处:通常当你试图减少你的问题以适应别人的小提琴时,你会带走足够多的无关紧要的东西,让你自己找到它。我数不清有多少 unposted SO 问题,因为我在创建 jsfiddle 时看到了问题。
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多