복붙노트

[SCALA] 나는 구성하고 스칼라 / 리프트에서 JSON 문자열을 구문 분석 할 수있는 방법

SCALA

나는 구성하고 스칼라 / 리프트에서 JSON 문자열을 구문 분석 할 수있는 방법

나는 브라우저와 내 응용 프로그램 사이에 데이터를 전송하는 JSON을 사용하려고 시도하고있다.

내가 JSON 문자열을 생성하고 구문 분석하는 데 사용 리프트 1.0를 시도하고 있지만, 어떤 이유로 나는 JSON 나는 단지 건설을 구문 분석 할 수 없습니다입니다 :

scala>import scala.util.parsing.json.JSON._
import scala.util.parsing.json.JSON._

scala> import net.liftweb.http.js._
import net.liftweb.http.js._

scala> import net.liftweb.http.js.JE._
import net.liftweb.http.js.JE._

scala> val json = JsObj(("foo", 4), ("bar", "baz")).toJsCmd
json: String = {'foo': 4, 'bar': 'baz'}

scala>  parseFull(json)  
res3: Option[Any] = None

어떻게 프로그램도 다시 구문 분석 할 수있는 유효한 JSON의 스칼라의 메시지 / 리프트를 구성합니까?

해결법

  1. ==============================

    1.당신은 단일 인용 문자열을 JSON을 생산 리프트 1.0의 JsCmd를 사용하여 만 따옴표 문자열을 지원하는 스칼라의 파서, 그것을 구문 분석하려고합니다.

    당신은 단일 인용 문자열을 JSON을 생산 리프트 1.0의 JsCmd를 사용하여 만 따옴표 문자열을 지원하는 스칼라의 파서, 그것을 구문 분석하려고합니다.

    JSON에 대한 여러 정의가 있다는 것을 깨닫는 것이 중요하다.

    단일 인용 문자열은 JSON에서 유효합니까?

    리프트 및 스칼라 때로는 버전 사이에 동작을 각기 다른, JSON을 구문 분석하는 여러 가지 방법을 제공합니다.

    이 파서에 의해 허용 문자열은 해당되지 않습니다.

    여기에 제품 및 구문 분석 JSON 문자열에 대한 다양한 방법의 몇 가지 의견과 예입니다.

    예:

    scala> import net.liftweb.json.JsonAST
    import net.liftweb.json.JsonAST
    
    scala> import net.liftweb.json.JsonDSL._
    import net.liftweb.json.JsonDSL._
    
    scala> import net.liftweb.json.Printer._
    import net.liftweb.json.Printer._
    
    scala> val json1 = ("foo" -> 4) ~ ("bar" -> "baz")
    json1: net.liftweb.json.JsonAST.JObject = JObject(List(JField(foo,JInt(4)), JField(bar,JString(baz))))
    
    scala> compact(JsonAST.render(json1))
    res0: String = {"foo":4,"bar":"baz"}
    
    scala> val json2 = List(1,2,3)
    json2: List[Int] = List(1, 2, 3)
    
    scala> compact(JsonAST.render(json2))
    res1: String = [1,2,3]
    
    scala> val json3 = ("foo", 4) ~ ("bar", List(1,2,3))
    json3: net.liftweb.json.JsonAST.JObject = JObject(List(JField(foo,JInt(4)), JField(bar,JArray(List(JInt(1), JInt(2), JInt(3))))))
    
    scala> compact(JsonAST.render(json3))
    res2: String = {"foo":4,"bar":[1,2,3]}
    

    예:

    scala> import scala.xml.dtd.PublicID
    import scala.xml.dtd.PublicID
    
    scala> import net.liftweb.json._
    import net.liftweb.json._
    
    scala> import net.liftweb.json.JsonAST._
    import net.liftweb.json.JsonAST._
    
    scala> import net.liftweb.json.JsonDSL._
    import net.liftweb.json.JsonDSL._
    
    scala> implicit val formats = DefaultFormats 
    formats: net.liftweb.json.DefaultFormats.type = net.liftweb.json.DefaultFormats$@7fa27edd
    
    scala> val jsonAst = ("publicId1" -> "idString") ~ ("systemId" -> "systemIdStr")
    jsonAst: net.liftweb.json.JsonAST.JObject = JObject(List(JField(publicId,JString(idString)), JField(systemId,JString(systemIdStr))))
    
    scala> jsonAst.extract[PublicID]
    res0: scala.xml.dtd.PublicID = PUBLIC "idString" "systemIdStr"
    

    예:

    scala>import scala.util.parsing.json.JSON._
    import scala.util.parsing.json.JSON._
    
    scala>  parseFull("{\"foo\" : 4 }")        
    res1: Option[Any] = Some(Map(foo -> 4.0))
    
    scala> parseFull("[ 1,2,3 ]")
    res2: Option[Any] = Some(List(1.0, 2.0, 3.0))
    
    scala>  parseFull("{'foo' : 4 }")  
    res3: Option[Any] = None
    

    예:

    scala> import net.liftweb.util.JSONParser._
    import net.liftweb.util.JSONParser._
    
    scala> parse("{\"foo\" : 4 }")    
    res1: net.liftweb.common.Box[Any] = Full(Map(foo -> 4.0))
    
    scala> parse("[ 1,2,3 ]")
    res2: net.liftweb.common.Box[Any] = Full(List(1.0, 2.0, 3.0))
    
    scala> parse("{'foo' : 4}")           
    res3: net.liftweb.common.Box[Any] = Full(Map(foo -> 4.0))
    

    예:

    scala> import net.liftweb.json._
    import net.liftweb.json._
    
    scala> import net.liftweb.json.JsonParser._
    import net.liftweb.json.JsonParser._
    
    scala> parse("{\"foo\" : 4 }")
    res1: net.liftweb.json.JsonAST.JValue = JObject(List(JField(foo,JInt(4))))
    
    scala> parse("[ 1,2,3 ]")
    res2: net.liftweb.json.JsonAST.JValue = JArray(List(JInt(1), JInt(2), JInt(3)))
    
    scala> parse("{'foo' : 4}")    
    net.liftweb.json.JsonParser$ParseException: unknown token '
    Near: {'foo' : 4}
        at net.liftweb.json.JsonParser$Parser.fail(JsonParser.scala:216)
        at net.liftweb.json.JsonParser$Parser.nextToken(JsonParser.scala:308)
        at net.liftweb.json.JsonParser$$anonfun$1.apply(JsonParser.scala:172)
        at net.liftweb.json.JsonParser$$anonfun$1.apply(JsonParser.scala:129)
        at net.liftweb.json.JsonParse...
    

    예:

    scala> import net.liftweb.http.js._
    import net.liftweb.http.js._
    
    scala> import net.liftweb.http.js.JE._
    import net.liftweb.http.js.JE._
    
    scala> JsObj(("foo", 4), ("bar", "baz")).toJsCmd
    res0: String = {'foo': 4, 'bar': 'baz'}
    
    scala> JsArray(1,2,3).toJsCmd
    res1: String = 
    [1, 2, 3]
    
    scala>  JsObj(("foo", 4), ("bar", JsArray(1,2,3))).toJsCmd
    res2: String = 
    {'foo': 4, 'bar': [1, 2, 3]
    }
    

    예:

    scala> import net.liftweb.http.js._
    import net.liftweb.http.js._
    
    scala> import net.liftweb.http.js.JE._
    import net.liftweb.http.js.JE._
    
    scala> JsObj(("foo", 4), ("bar", "baz")).toJsCmd
    res0: String = {"foo": 4, "bar": "baz"}
    
    scala> JsArray(1,2,3).toJsCmd
    res1: String = 
    [1, 2, 3]
    
    scala> JsObj(("foo", 4), ("bar", JsArray(1,2,3))).toJsCmd
    res3: String = 
    {"foo": 4, "bar": [1, 2, 3]
    }
    

    예:

    scala> import scala.util.parsing.json._
    import scala.util.parsing.json._
    
    scala> JSONObject (Map ("foo" -> 4, "bar" -> JSONArray (1 :: 2 :: 3 :: Nil))) .toString()
    res0: String = {"foo" : 4, "bar" : [1, 2, 3]}
    
  2. ==============================

    2.키르케를 살펴 보자. 그것은 사용하기 정말 좋은 그리고 그것은 볼품와 고양이의 새로운 도구의 일부를 활용합니다. 게다가, 당신은 자바 스크립트로 컴파일 스칼라에서 사용할 수 있습니다.

    키르케를 살펴 보자. 그것은 사용하기 정말 좋은 그리고 그것은 볼품와 고양이의 새로운 도구의 일부를 활용합니다. 게다가, 당신은 자바 스크립트로 컴파일 스칼라에서 사용할 수 있습니다.

    키르케의 추가 정보에서 발췌 :

  3. from https://stackoverflow.com/questions/927983/how-can-i-construct-and-parse-a-json-string-in-scala-lift by cc-by-sa and MIT license