【问题标题】:Parsed JSON in multiple columns在多列中解析 JSON
【发布时间】:2017-07-27 12:26:17
【问题描述】:

我正在收集一些 API 信息,我编写了一个程序来读取域并查找 API 信息,并在找到信息后将其生成的整个 JSON 文本放入 Microsoft SQL Server 中的列中表。

这是其中一个 JSON 输出的外观:

    {
  "id": "3e3562a7-b160-4fd8-a190-8ca0a5288794",
  "name": "Garmin",
  "legalName": "Garmin Ltd.",
  "domain": "garmin.com",
  "domainAliases": [
    "garmin.de",
    "garmin.se",
    "garmin.si",
    "garmin.nl",
    "garmin.dk",
    "garmin.it",
    "garmin.fi",
    "garmin.no",
    "garmin.hr",
    "garmin.at",
    "garmin.pl",
    "garmin.cl",
    "garmin.com.au",
    "garmin.co.uk",
    "garmin.be",
    "garminconnect.com",
    "garmin.com.mx",
    "garminservice.de",
    "garmin.es",
    "garminasus.com",
    "garminonline.de",
    "opencaching.com",
    "garmin.com.br",
    "garmin.pt",
    "garminfrance.com",
    "garmin.ro",
    "garmin.com.hr",
    "garmin.com.ar",
    "garmin.ca",
    "inreachdelorme.com"
  ],
  "site": {
    "title": "Garmin International | Home",
    "h1": "NEW VIRB® 360",
    "metaDescription": "Delivering innovative GPS technology across diverse markets, including aviation, marine, fitness, outdoor recreation, tracking and mobile apps.",
    "metaAuthor": "Garmin",
    "phoneNumbers": [
      "+1 913-397-8200"
    ],
    "emailAddresses": [
      "domain.admin@garmin.com",
      "productsupport.privacy@garmin.com",
      "webmaster@garmin.com",
      "garminsecurity@garmin.com",
      "copyright@garmin.com"
    ]
  },
  "category": {
    "sector": "Information Technology",
    "industryGroup": "Software & Services",
    "industry": "Internet Software & Services",
    "subIndustry": "Internet Software & Services",
    "sicCode": "3812",
    "naicsCode": null
  },
  "tags": [
    "Technology",
    "E-commerce",
    "Enterprise",
    "B2B",
    "B2C",
    "Consumer Discretionary",
    "Consumer Electronics"
  ],
  "description": "Delivering innovative GPS technology across diverse markets, including aviation, marine, fitness, outdoor recreation, tracking and mobile apps.",
  "foundedYear": 1989,
  "location": "Olathe, KS 66062, USA",
  "timeZone": "America/Chicago",
  "utcOffset": -5,
  "geo": {
    "streetNumber": null,
    "streetName": null,
    "subPremise": null,
    "city": "Olathe",
    "postalCode": "66062",
    "state": "Kansas",
    "stateCode": "KS",
    "country": "United States",
    "countryCode": "US",
    "lat": 38.8271089,
    "lng": -94.7898731
  },
  "logo": "https://logo.clearbit.com/garmin.com",
  "facebook": {
    "handle": "garmin",
    "likes": 1542748
  },
  "linkedin": {
    "handle": "company/garmin-international"
  },
  "twitter": {
    "handle": "Garmin",
    "id": "15324722",
    "followers": 136976,
    "following": 812,
    "location": "at Garmin HQ just outside KC",
  },
  "crunchbase": {
    "handle": "organization/garmin"
  },
  "emailProvider": false,
  "type": "public",
  "ticker": "GRMN",
  "phone": "+41 52 630 16 00",
  "metrics": {
    "alexaUsRank": 1094,
    "alexaGlobalRank": 1535,
    "googleRank": null,
    "employees": 10000,
    "employeesRange": "1000+",
    "marketCap": 9800000000,
    "raised": null,
    "annualRevenue": 3018665000,
    "fiscalYearEnd": 12
  },
  "indexedAt": "2017-07-06T02:54:05.626Z",
  "tech": [
    "centos",
    "akamai_dns",
    "apache",
    "outlook",
    "microsoft_office_365",
    "google_analytics",
    "microsoft_exchange_online",
    "debian",
    "tealium",
    "youtube",
    "recaptcha"
  ],
  "similarDomains": [
    "cerner.com",
    "delorme.com",
    "fitbit.com",
    "google.com",
    "gpscity.com",
    "lowrance.com",
    "magellangps.com",
    "novatel.com",
    "polar.com",
    "suunto.com",
    "thegpsstore.com",
    "trimble.com"
  ]
}

图片示例:

所以我现在需要做的只是取出一些数据,例如“公司名称”、“类别”(包含所有子类别信息)、“员工”、“员工范围”、“市值”、“年收入” " 和 "similardomains" (这应该作为全文列)并在其自己的列中对每个域进行排序。如果能得到任何帮助或指示,我将非常高兴。

【问题讨论】:

标签: sql sql-server json parsing sql-server-2017


【解决方案1】:

使用 JSON_VALUE 函数,您可以从 JSON 列中提取所有数据

  SELECT * , 
     JSON_VALUE(JsonColumn,'$.name') AS CompanyName
     , JSON_VALUE(JsonColumn,'$.category.sector') AS CategorySector
     , JSON_VALUE(JsonColumn, '$.category.industryGroup') AS CategoryIndustryGroup
     -- etc
  FROM YourTable

【讨论】:

  • 现在试试。在我的情况下,JsonColumn 是名为“JSON”的列,还是保留 JsonColumn 是正确的? JSON_VALUE(>>>>JsonColumn
  • 将 JsonColumn 替换为您存储 JSON 的列的名称
  • 好吧,我完成了查询,但出现了一个新错误。由于这个 JSON 文本非常大,我在开始时为它们分配了 TEXT 数据类型。现在我得到这个错误:Msg 8116, Level 16, State 1, Line 14 Argument data type text is invalid for argument 1 of json_value function.
  • 我试过了:UPDATE Domains SET JSON = REPLACE (CONVERT(VARCHAR(MAX), JSON), '<', '
  • 使用 Alter table .. alter column 将数据类型更改为 nvarchar(max)。文本是不推荐使用的类型
猜你喜欢
  • 2014-05-16
  • 2021-12-28
  • 2018-04-23
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多