Nasıl ve Scala içinde bir JSON dize yapısı ayrıştırılamadı / kaldırabilir miyim
JSON tarayıcı ve benim uygulama arasında veri göndermeye çalışıyorum.
Asansör 1.0 ve JSON dize oluşturmak ayrıştırmak için kullanmaya çalışıyorum, ama nedense JSON sadece inşa ayrıştırılamadı duyuyorum:
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
Nasıl da tekrar ayrıştırılabilir Scala/Lift geçerli bir JSON mesaj programlı olarak inşa miyim?
CEVAP
Tek tırnaklı dizeleri ile JSON üreten 1.0 JsCmd
, Asansör kullanmak, çift tırnaklı dizeleri destekleyen scala'nın ayrıştırıcı, bunu ayrıştırmak için çalışıyorsunuz.
Önemli JSON için birden fazla tanımları vardır gerçekleştirmektir.
Tek tırnaklı dize geçerli bir JSON?
- 21 ** göre
- Orijinal RFC 4627 Crockford göre değil
Asansör ve Scala sürümleri arasında JSON, bazen farklı davranış ile ayrıştırmak için birçok yol sağlar.
Dizeleri bu ayrıştırıcıları tarafından kabul edilen eşdeğer değildir.
Burada Ürün için çeşitli yöntemler ve ayrıştırma JSON dizeleri bazı açıklamalar ve örnekler.
lift-json kütüphane DSL ile JSON üreten
- Tavsiye
- İsmine rağmen, bu Asansör geri kalanı üzerinde hiçbir bağımlılıkları ile ayrı bir proje
örnek:
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]}
lift-json kütüphanesi ile JSON ayrıştırma
- Tavsiye
- Dava sınıflar km/örtülü eşleme sağlar
- Dava sınıflar içinde tanımlanan konsol şu anda desteklenmiyor (
com.thoughtworks.paranamer.ParameterNamesNotFoundException: Unable to get class bytes
atar) - Aşağıdaki örnek, scala konsolda çalışması
PublicID
, önceden varolan bir durum scala sınıf kullanır.
örnek:
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 2.7.7 ve 2.8.1 ayrıştırma JSON
- - "No longer really supported" . Tavsiye
- 2.7.7. ayrıştırıcı tek tırnaklı JSON ayrıştırmak olmaz Scala
- Bu ayrıştırma yöntemi, Soru içinde kullanılır
örnek:
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
Asansör 2.0 JSON ayrıştırma ve util.JSONParser 2.2
- Nötr Öneri
- Asansör açıklama.JSONParser tek veya çift tırnaklı JSON dizeleri ayrıştırma
örnek:
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))
Asansör 2.0 JSON ayrıştırma ve json.JsonParser ile 2.2
- Nötr Öneri
- Asansör json.JsonParser tek tırnaklı JSON dizesini ayrıştırmak değil
örnek:
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...
Asansör 1.0 JsCmd ile JSON üreten
- Tavsiye - çıkış tüm JSON ayrıştırıcıları için geçerli değil
- -Alıntılar tek dizeler: etrafında dikkat edin
örnek:
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]
}
Asansör 2.0 JsCmd ile JSON üreten
- Nötr Öneri
- Çift tırnak dizeleri etrafında not:
örnek:
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 içinde JSON (2.10 test) Producint
- "No longer really supported" çalışıyor ve orada ama.
örnek:
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]}
Nasıl php bir dize sonunda 3 karakter ...
Nasıl dize bir kaynaktan AlertDialog i...
Nasıl Scala içinde implicits zinciri m...
Clojure içinde nasıl bir dizi için bir...
Nasıl bir dize başka bir dize içeriyor...