SQL Server 2016:导入JSON信息

时间:2018-01-11 08:56:45

标签: json sql-server sql-server-2016

我运行SQL Server 2016来存储通过REST / JSON收到的不同信息。这工作正常,我实际上添加了其他来源(4种导入类型)。在一个json导入我得到一个错误:

  

Msg 13609,Level 16,Status 4,line 2
  JSON文本格式不正确。在位置0处,发现了意外的字符“൛”。

我检查了文件和语法,它们与我导入的其他文件/格式类似(没有错误):

Json示例:

[
  {
    "cid": 6498,
    "hotel_description": "Hotelmerkmale: All Inclusive, Family, Paare, Single\n<br /> \n<br /> Die ideale Wahl f&uuml;r den unternehmungslustigen Gast. Genie&szlig;en Sie tags&uuml;ber vom Pool den entspannenden Blick auf das Meer und die Side-Halbinsel und leben Sie abends Ihr Shopping- oder Tanzfieber in der nahe gelegenen Altstadt von Side aus.\n<br /> \n<br /> \n<strong>Lage:</strong> In erh&ouml;hter Lage mit Panoramablick auf das Meer und die historische Altstadt von Side. Ca. 200 m vom kilometerlangen, flach abfallenden, feinen Sandstrand und ca. 1,5 km vom Zentrum mit zahlreichen Einkaufs- und Unterhaltungsm&ouml;glichkeiten, Restaurants, Bars und Caf&eacute;s entfernt (regelm&auml;&szlig;ige Minibusverbindungen vorhanden).\n<br /> \n<br /> \n<strong>Ausstattung:</strong> Bekanntes Hotel der gehobenen Mittelklasse mit 2 Swimmingpools (einer davon mit 2 Wasserrutschen), Sonnenterrasse. Liegen, Auflagen, Sonnenschirme (Badet&uuml;cher gegen Kaution). Pool-/Snackbar, Strandbar. Elegante Empfangshalle, Rezeption, WLAN in der Lobby, Sitzgruppen, Lobbybar, Spieleraum, Fernsehecke mit Gro&szlig;bildschirm, klimatisiertes Hauptrestaurant, 4 &Agrave;-la-carte-Restaurants, Minimarkt, Diskothek, Friseur, Hallenbad. Landeskategorie: 5 Sterne, 341 Zimmer, 6 Etagen, Lifte.\n<br /> \n<br /> \n<strong>Wohnen:</strong> Doppelzimmer (ca. 18-22 qm), Klimaanlage (indiv.), Minibar, Telefon, TV, Mietsafe, Kaffee-/Teeset. Dusche/WC mit F&ouml;hn. Balkon. Max. 2E. Wahlweise seitl. Meerblick/Meerblick. Max. 3E, auch zur Alleinnutzung buchbar\n<br /> Juniorsuite (ca. 35 qm), zus. Couch, Klimaanlage (indiv.), Minibar, Telefon, TV, Mietsafe, Kaffee-/Teeset. Dusche/WC mit F&ouml;hn. Balkon. Landseite/seitl. Meerblick. Max. 3E+1K\n<br /> Familienzimmer (ca. 40 qm), zus. separates Schlafzimmer, Klimaanlage (indiv.), Minibar, Telefon, TV, Mietsafe, Kaffee-/Teeset. Dusche/WC mit F&ouml;hn. Balkon. Meerseite/seitl. Meerblick. Max. 4E\n<br /> \n<br /> \n<strong>Essen und Trinken:</strong> all inclusive: Fr&uuml;hst&uuml;cksbuffet, mittags und abends kaltes/warmes Buffet, Themenabende, t&auml;glich Showkochen\n<br /> Snacks (stdw.), nachm. Kaffee, Tee, Geb&auml;ck\n<br /> Alkoholfr., nat. alkohol. (ab 18 J.) Getr&auml;nke von 10:00-24:00 Uhr (an der Strandbar von 10:00-17:00 Uhr)T&auml;gliche Auff&uuml;llung der Minibar mit Wasser\n<br /> \n<br /> \n<strong>Wellness und Fitness:</strong> Wellnesscenter (ca. 370 qm)\n<br /> T&uuml;rkisches Bad, Dampfbad, Sauna\n<br /> Jacuzzi, Wellnessmassagen (geg. Geb.)\n<br /> Fitnessraum (ca. 70 qm)\n<br /> \n<br /> \n<strong>Sport und Fitness:</strong> Tischtennis\n<br /> Wassersport am Strand (&ouml;rtlicher Anbieter, gegen Geb&uuml;hr)\n<br /> \n<br /> \n<strong>Einzelzimmer ohne Aufpreis:</strong> Zu bestimmten Terminen kein Zuschlag\n<br /> \n<strong>Single mit Kind:</strong> Kinderfestpreis bei einem Vollzahler\n<br /> \n<strong>Kinderfestpreis:</strong>2 Kinder 2-12 Jahre\n<br />\n<br /> \n<br /> \n<strong>Minis &amp; Maxis (4-12 Jahre):</strong> Miniclub (stdw.)\n<br /> Spielplatz, Kinderbuffet\n<br /> \n<br />"
  }
]

我的SQL语句如下所示:

MERGE dbo.hotel_description t
USING ((SELECT
            cid, hotel_description
        FROM
            OPENROWSET(BULK 'C:\Import\weg.de\hotel_info_import.json', SINGLE_NCLOB)j
        CROSS APPLY
            OPENJSON(BulkColumn)
            WITH
               (cid INT,
                hotel_description NVARCHAR(MAX)))) s ON t.cid = s.cid

WHEN NOT MATCHED THEN
    INSERT (cid, hotel_description)
    VALUES (s.cid, s.hotel_description);

我检查了Google和stackoverflow,但没有找到该错误消息的原因。 任何提示?

由于

此致 蒂莫

1 个答案:

答案 0 :(得分:0)

在SQL Server 2016中,CU7仍然需要将JSON文件编码为Little Endian(UCS-2)或带有BOM的UTF8。没有BOM的UTF8会遇到该错误。