Преобразовать строку JSON, возвращенную из веб-API, в объект JSON - PullRequest
0 голосов
/ 19 декабря 2018

Я пишу код для получения данных JSON из веб-API и в конечном итоге хочу поместить его в HBASE таблицу, используя Phoenix.

Исходный фрагмент кода, который я использую для получения данныхВеб-API возвращает мне данные в виде строки:

class Health() {
 def getHealthData() {
  val userRDD = df.select("ID", "PERMISSION_T", "UPDATE_T", "HEALTHTID").rdd;
  val newData = userRDD.map(
   (
    row => {
     {
      var ID = row(0).toString // User ID
      var permT = row(1).toString // access token
      var rT = row(2).toString // refresh token
      var healthID = row(3).toString // fitbit user id
      var forDate = "2018-12-04"
      val hUrl = s "web api url"
      try {
       --Piece of code to connect to web api-- --
        hJsonStr = heartHandler.handleResponse(heartResponse).trim
       println(s "=============In TRY(Print hJsonStr) ============$hJsonStr")
      }
      heartClient.getConnectionManager().shutdown();
     } catch {
      case unauthorized:
       Exception => {
        println(s "Unknown exception: $hUrl")
        RecoverToken()
       }
     }
     def RecoverToken(): Unit = {
      println("<<<<<<<<<< Recover Token >>>>>>>>>")
      val recoverUrl = "recover url"
     }
     //heartJson
     //heartJsonStr
     "ID:" + ID + s "--$hUrl -- $hJsonStr -- " //+ accessToken  //+ "--" + activitiesJsonStr
    };
   }
  )
 );
 newData.collect.foreach {
  println
 }


 val fb = new Fitbit(); // initialize new fitbit object
 fb.getFitBitData(); // call function to fetch data

Теперь я хочу преобразовать эту строку со встроенными значениями JSON в соответствующий объект JSON, чтобы я мог поместить его в HBASE.Мне нужно сделать это с помощью Spark, Scala на Zappelin.

Ниже приведены примеры данных, которые я получаю из веб-API с помощью приведенного выше кода:

ID: XYZ1 - веб-адрес -{ "деятельность-сердце": [{ "DATETIME": "2018-12-18", "значение": { "customHeartRateZones": [], "heartRateZones": [{ "caloriesOut": 714,31496, "макс": 88, "min": 30, "minutes": 667, "name": "Out of Range"}, {"caloriesOut": 240.01076, "max": 123, "min": 88, "minutes": 66, "name ":" Fat Burn "}, {" caloriesOut ": 0," max ": 150," min ": 123," minutes ": 4," name ":" Cardio "}, {" caloriesOut ": 0,"max": 220, "min": 150, "minutes": 0, "name": "Peak"}], "restHeartRate": 62}}]} - ID: XYZ2 - веб-адрес - -

Я попытался импортировать несколько библиотек JSON и использовал приведенный ниже код, но это не удалось из-за синтаксических ошибок:

import org.json4s.jackson.JsonMethods._
val parsed = parse(newData).asInstanceOf[JObject]
parse(newData).asInstanceOf[JObject]

1 Ответ

0 голосов
/ 24 декабря 2018

После предложения @vindev я, по-видимому, понял, что мне нужно удалить дополнительную строку, прежде чем пытаться преобразовать строку JSON в объект JSON.Как только я это сделал, я смог преобразовать его внутри цикла.Я использовал приведенный ниже фрагмент кода после получения значения hJsonStr в коде:

hJsonStr = heartHandler.handleResponse(heartResponse).trim

import org.json4s.jackson.JsonMethods._
val parsedHJsonStr = parse(hJsonStr)
...