在JavaScript中使用JSON.parse()时出错

时间:2015-08-27 20:54:54

标签: javascript json

我有以下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"}}}

当我使用谷歌浏览器的控制台执行此操作时,它会给我一个错误。我想写下以下几行:

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

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

Uncaught SyntaxError: Unexpected identifier(…)

有什么问题?

2 个答案:

答案 0 :(得分:4)

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

这是一个非常常见的错误。

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

答案 1 :(得分:2)

@Adosi已经正确回答了这个问题,但我正在添加一个例子,所以我还是要包含它,因为它的评论时间太长了。将其添加到您的代码中并打开浏览器的控制台。

# -*- coding: cp850 -*
__author__ = 'Neil Parker Sánchez'

import tkinter as tk

TITLE_FONT1 = ("Helvetica", 25, "bold")
TITLE_FONT2 = ("Helvetica", 18, "bold")
SUBTITLE_FONT1 = ("Helvetica", 14)
SUBTITLE_FONT2 = ("Helvetica", 10, "bold italic")
SUBTITLE_FONT3 = ("Helvetica", 12, "bold")
SUBTITLE_FONT4 = ("Helvetica", 10, "bold")


class MainApp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (MenuPrincipal, CalculoFinal, CalculoActividades):
            frame = F(container, self)
            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(MenuPrincipal)

    def show_frame(self, c):
        frame = self.frames[c]
        frame.tkraise()


class MenuPrincipal(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="CÁLCULO DE PRECIOS", font=TITLE_FONT1)
        label.pack(side="top", fill="x", pady=10)

        CFinal = tk.Button(self, width=20, text="Cálculo Final",
                            command=lambda: controller.show_frame(CalculoFinal))
        CActividades = tk.Button(self, width=20, text="Cálculo Actividades",
                            command=lambda: controller.show_frame(CalculoActividades))
        CFinal.pack()
        CActividades.pack(pady=10)


class CalculoFinal(tk.Frame):

    def __init__(self, parent, controller):
        self.controller = controller
        tk.Frame.__init__(self, parent)
        self.label = tk.Label(self, text="CÁLCULO FINAL", font=TITLE_FONT2)
        self.label.pack(side="top", fill="x", pady=10)


        #Frame
        self.MainFrame = tk.Frame(self, bd=5, relief="groove")
        self.MainFrame.pack()

        #Variables
        self.QuienReserva = tk.StringVar()
        self.TipoGrupo = tk.StringVar()
        self.TipoAlojamiento = tk.StringVar()
        self.TipoTransfer = tk.StringVar()
        self.HorarioTransfer = tk.StringVar()
        self.AeropuertoLlegada = tk.StringVar()

        #Widgets Declared
        self.DatosPrincipalesGrupo = tk.Label(self.MainFrame, text="DATOS PRINCIPALES GRUPO", font=SUBTITLE_FONT1, relief="groove")
        self.QuienReservaQ = tk.Label(self.MainFrame, text="¿Quien Reserva?")
        self.QuienReservaA = tk.OptionMenu(self.MainFrame, self.QuienReserva, "Agente", "Cliente directo")
        self.Personas = tk.Label(self.MainFrame, text="Personas", font=SUBTITLE_FONT2)
        self.NumeroAlumnosQ = tk.Label(self.MainFrame, text="Nº Alumnos")
        self.NumeroAlumnosA = tk.Spinbox(self.MainFrame, from_=0, to=100)
        self.NumeroLeadersQ = tk.Label(self.MainFrame, text="Nº Leaders")
        self.NumeroLeadersA = tk.Spinbox(self.MainFrame, from_=0, to=100)
        self.EdadAlumnosQ = tk.Label(self.MainFrame, text="Edad Alumnos")
        self.EdadAlumnosA = tk.Spinbox(self.MainFrame, from_=0, to=100)
        self.Curso = tk.Label(self.MainFrame, text="Curso", font=SUBTITLE_FONT2)
        self.TipoGrupoQ = tk.Label(self.MainFrame, text="Tipo de Grupo")
        self.TipoGrupoA = tk.OptionMenu(self.MainFrame, self.TipoGrupo, "Cerrado", "Internacional")
        self.HorasSemanaQ = tk.Label(self.MainFrame, text="Nº Horas Curso / Semana")
        self.HorasSemanaA = tk.Spinbox(self.MainFrame, from_=0, to=100)
        self.SemanasCursoQ = tk.Label(self.MainFrame, text="Nº Semanas de Curso")
        self.SemanasCursoA = tk.Spinbox(self.MainFrame, from_=0, to=100)
        self.GruposPrevistosQ = tk.Label(self.MainFrame, text="Nº de Grupos Previsto")
        self.GruposPrevistosA = tk.Spinbox(self.MainFrame, from_=0, to=100)
        self.Alojamiento = tk.Label(self.MainFrame, text="Alojamiento", font=SUBTITLE_FONT2)
        self.TipoAlojamientoQ = tk.Label(self.MainFrame, text="Tipo de Alojamiento")
        self.TipoAlojamientoA = tk.OptionMenu(self.MainFrame, self.TipoAlojamiento, "Familia B&B", "Familia HB", "Familia FB", "Lestonnac Doble B&B", "Lestonnac Doble HB", "Lestonnac Doble FB", "Lestonnac Individual B&B", "Lestonnac Individual HB", "Lestonnac Individual FB", "BCN Resident (sin comidas)", "BCN Resident B&B", "BCN Resident HB", "BCN Resident FB", "La Roca Doble B&B", "La Roca Doble HB", "La Roca Doble FB", "La Roca Individual B&B", "La Roca Individual HB", "La Roca Individual FB", "Alojamiento Alternativo")
        self.NumeroNochesQ = tk.Label(self.MainFrame, text="Nº Noches")
        self.NumeroNochesA = tk.Spinbox(self.MainFrame, from_=0, to=100)
        self.Transfer = tk.Label(self.MainFrame, text="Transfer", font=SUBTITLE_FONT2)
        self.TipoTransferQ = tk.Label(self.MainFrame, text="Tipo de Transfer (ida / vuelta)")
        self.TipoTransferA = tk.OptionMenu(self.MainFrame, self.TipoTransfer, "Solo Ida (o solo vuelta)", "Ida & Vuelta")
        self.HorarioTransferQ = tk.Label(self.MainFrame, text="Horario del Transfer")
        self.HorarioTransferA = tk.OptionMenu(self.MainFrame, self.HorarioTransfer, "Diurno (06:01 - 21:59)", "Nocturno (22:00 - 06:00)")
        self.AeropuertoLlegadaQ = tk.Label(self.MainFrame, text="Aeropuerto de Llegada")
        self.AeropuertoLlegadaA = tk.OptionMenu(self.MainFrame, self.AeropuertoLlegada, "Barcelona-El Prat", "Girona-Costa Brava")
        self.NumeroGuiasQ = tk.Label(self.MainFrame, text="Nº Guías IH Transfer")
        self.NumeroGuiasA = tk.Spinbox(self.MainFrame, from_=0, to=100)

        #Widgets Placed
        self.DatosPrincipalesGrupo.grid(column=1, row=1, columnspan=2)
        self.QuienReservaQ.grid(column=1, row=2, sticky="W")
        self.QuienReservaA.grid(column=2, row=2, sticky="E")
        self.Personas.grid(column=1, row=3, columnspan=2)
        self.NumeroAlumnosQ.grid(column=1, row=4, sticky="W")
        self.NumeroAlumnosA.grid(column=2, row=4, sticky="E")
        self.NumeroLeadersQ.grid(column=1, row=5, sticky="W")
        self.NumeroLeadersA.grid(column=2, row=5, sticky="E")
        self.EdadAlumnosQ.grid(column=1, row=6, sticky="W")
        self.EdadAlumnosA.grid(column=2, row=6, sticky="E")
        self.Curso.grid(column=1, row=7, columnspan=2)
        self.TipoGrupoQ.grid(column=1, row=8, sticky="W")
        self.TipoGrupoA.grid(column=2, row=8, sticky="E")
        self.HorasSemanaQ.grid(column=1, row=9, sticky="W")
        self.HorasSemanaA.grid(column=2, row=9, sticky="E")
        self.SemanasCursoQ.grid(column=1, row=10, sticky="W")
        self.SemanasCursoA.grid(column=2, row=10, sticky="E")
        self.GruposPrevistosQ.grid(column=1, row=11, sticky="W")
        self.GruposPrevistosA.grid(column=2, row=11, sticky="E")
        self.Alojamiento.grid(column=1, row=12, columnspan=2)
        self.TipoAlojamientoQ.grid(column=1, row=13, sticky="W")
        self.TipoAlojamientoA.grid(column=2, row=13, sticky="E")
        self.NumeroNochesQ.grid(column=1, row=14, sticky="W")
        self.NumeroNochesA.grid(column=2, row=14, sticky="E")
        self.Transfer.grid(column=1, row=15, columnspan=2)
        self.TipoTransferQ.grid(column=1, row=16, sticky="W")
        self.TipoTransferA.grid(column=2, row=16, sticky="E")
        self.HorarioTransferQ.grid(column=1, row=17, sticky="W")
        self.HorarioTransferA.grid(column=2, row=17, sticky="E")
        self.AeropuertoLlegadaQ.grid(column=1, row=18, sticky="W")
        self.AeropuertoLlegadaA.grid(column=2, row=18, sticky="E")
        self.NumeroGuiasQ.grid(column=1, row=19, sticky="W")
        self.NumeroGuiasA.grid(column=2, row=19, sticky="E")


        self.MPrincipal = tk.Button(self, width=20, text="Volver al menú principal",
                               command=lambda: controller.show_frame(MenuPrincipal))
        self.MPrincipal.pack(pady=10)


class CalculoActividades(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        self.subframe = tk.Frame(self)
        self.subframe.pack()

        self.canvas = tk.Canvas(self.subframe, borderwidth=0)

        self.subframe1 = tk.Frame(self.subframe)
        self.subframe1.grid(column=1, row=1, pady=20)
        self.subframe2 = tk.Frame(self.subframe)
        self.subframe2.grid(column=1, row=2, sticky="nw", padx=130)

        self.CalculoActividades = tk.Label(self.subframe1, text="CÁLCULO ACTIVIDADES", font=TITLE_FONT2)
        self.CalculoActividades.grid(column=1, row=1)

        #Frame
        self.MainFrame = tk.Frame(self.canvas)

        #Scrollbar
        self.vsb = tk.Scrollbar(self.subframe, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)

        self.vsb.grid(rowspan=4, column=2, row=1, sticky="ns")
        self.canvas.grid(row=3, column=1, sticky="nw")
        self.canvas.create_window((4,4), window=self.MainFrame, anchor="nw",
                                  tags="self.frame")
        self.MainFrame.bind("<Configure>", self.onFrameConfigure)

        #Variables

        #Widgets Declared
        self.AñadirActividad = tk.Label(self.subframe2, text="¿Añadir\nactividad?", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.NumeroVeces = tk.Label(self.subframe2, text="Nº veces que\nse hace la\nactividad en\ntotal de\nestancia", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.CuandoSeHace = tk.Label(self.subframe2, text="¿Cuándo se hace\nla actividad?", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.DuracionActividad = tk.Label(self.subframe2, text="Duración de la\nactividad\n(h)", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.Traslado = tk.Label(self.subframe2, text="Traslado a la\nactividad", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.Variables = tk.Label(self.subframe2, text="Variables", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.CosteFinal = tk.Label(self.subframe2, text="Coste final\ngrupo", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.PrecioFinal = tk.Label(self.subframe2, text="Precio final\ngrupo", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.PrecioAlumno = tk.Label(self.subframe2, text="Precio final\npor alumno", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.MargenEuro = tk.Label(self.subframe2, text="Margen (?)", font=SUBTITLE_FONT4, padx=2, pady=2)
        self.MargenPor = tk.Label(self.subframe2, text="Margen (%)", font=SUBTITLE_FONT4, padx=2, pady=2)

        self.Gratis = tk.Label(self.MainFrame, text="GRATIS\n\n", font=SUBTITLE_FONT3)
        self.MuseoOlimpico = tk.Label(self.MainFrame, text="MUSEO\nOLÍMPICO\n(>10 PAX)", font=SUBTITLE_FONT3)
        self.MuseoCera = tk.Label(self.MainFrame, text="MUSEO DE\nLA CERA\n", font=SUBTITLE_FONT3)
        self.TapasExperience = tk.Label(self.MainFrame, text="TAPAS\nEXPERIENCE\n", font=SUBTITLE_FONT3)
        self.CenaTipica = tk.Label(self.MainFrame, text="CENA\nTÍPICA\n", font=SUBTITLE_FONT3)
        self.CasaBatllo = tk.Label(self.MainFrame, text="CASA\nBATLLÓ\n", font=SUBTITLE_FONT3)
        self.Castellers = tk.Label(self.MainFrame, text="CASTELLERS\n\n", font=SUBTITLE_FONT3)
        self.Bowling = tk.Label(self.MainFrame, text="BOWLING\n\n", font=SUBTITLE_FONT3)
        self.MuseoChocolate = tk.Label(self.MainFrame, text="MUSEU DE LA\nXOCOLATA\n", font=SUBTITLE_FONT3)
        self.ParcGuell = tk.Label(self.MainFrame, text="PARC\nGÜELL\n", font=SUBTITLE_FONT3)
        self.SagradaFamilia = tk.Label(self.MainFrame, text="SAGRADA\nFAMILIA\n", font=SUBTITLE_FONT3)
        self.CasaMila = tk.Label(self.MainFrame, text="CASA\nMILÀ\n", font=SUBTITLE_FONT3)
        self.CampNou = tk.Label(self.MainFrame, text="CAMP\nNOU\n", font=SUBTITLE_FONT3)
        self.BCNTour = tk.Label(self.MainFrame, text="BARCELONA\nTOUR (6H)\n", font=SUBTITLE_FONT3)
        self.PortAventura = tk.Label(self.MainFrame, text="PORT\nAVENTURA\n", font=SUBTITLE_FONT3)
        self.Tarragona = tk.Label(self.MainFrame, text="TARRAGONA\n\n", font=SUBTITLE_FONT3)
        self.GironaFigueres = tk.Label(self.MainFrame, text="GIRONA &\nFIGUERES +\nDALÍ", font=SUBTITLE_FONT3)
        self.SitgesMontserrat = tk.Label(self.MainFrame, text="SITGES &\nMONTSERRAT\n", font=SUBTITLE_FONT3)
        self.Tibidabo = tk.Label(self.MainFrame, text="TIBIDABO\n(1/2 O 1 DÍA)\n", font=SUBTITLE_FONT3)
        self.Sitges = tk.Label(self.MainFrame, text="SITGES\n(1/2 DÍA)\n", font=SUBTITLE_FONT3)
        self.Collserola = tk.Label(self.MainFrame, text="COLLSEROLA\n(1/2 DÍA)\n", font=SUBTITLE_FONT3)

        #Widgets Placed
        self.AñadirActividad.grid(column=2, row=1)
        self.NumeroVeces.grid(column=3, row=1)
        self.CuandoSeHace.grid(column=4, row=1)
        self.DuracionActividad.grid(column=5, row=1)
        self.Traslado.grid(column=6, row=1)
        self.Variables.grid(column=7, row=1)
        self.CosteFinal.grid(column=8, row=1)
        self.PrecioFinal.grid(column=9, row=1)
        self.PrecioAlumno.grid(column=10, row=1)
        self.MargenEuro.grid(column=11, row=1)
        self.MargenPor.grid(column=12, row=1)

        self.Gratis.grid(column=1, row=3)
        self.MuseoOlimpico.grid(column=1, row=5)
        self.MuseoCera.grid(column=1, row=7)
        self.TapasExperience.grid(column=1, row=9)
        self.CenaTipica.grid(column=1, row=11)
        self.CasaBatllo.grid(column=1, row=13)
        self.Castellers.grid(column=1, row=15)
        self.Bowling.grid(column=1, row=17)
        self.MuseoChocolate.grid(column=1, row=19)
        self.ParcGuell.grid(column=1, row=21)
        self.SagradaFamilia.grid(column=1, row=23)
        self.CasaMila.grid(column=1, row=25)
        self.CampNou.grid(column=1, row=27)
        self.BCNTour.grid(column=1, row=29)
        self.PortAventura.grid(column=1, row=31)
        self.Tarragona.grid(column=1, row=33)
        self.GironaFigueres.grid(column=1, row=35)
        self.SitgesMontserrat.grid(column=1, row=37)
        self.Tibidabo.grid(column=1, row=39)
        self.Sitges.grid(column=1, row=41)
        self.Collserola.grid(column=1, row=43)


        self.MPrincipal = tk.Button(self.subframe1, width=20, text="Volver al menú principal",
                               command=lambda: controller.show_frame(MenuPrincipal))
        self.MPrincipal.grid(column=5, row=1, padx=10)

    def onFrameConfigure(self, event):
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

if __name__ == "__main__":
    app = MainApp()
    app.mainloop()

这是在行动。 http://jsfiddle.net/qn9xkt7c/(因为Stack Snippet编辑器对我来说是巨型json对象)