Выберите конкретное значение из массива JSON - PullRequest
2 голосов
/ 07 января 2020

У меня есть массив JSON, содержащий следующие детали, я хотел бы извлечь значение выравнивания текста Right и присвоить его значению.

"data":[
  {
    "formatType": "text",
    "value": "bgyufcie huis huids hufhsduhfsl hd"
  },
  {
    "formatType": "text size",
    "value": 12
  },
  {
    "formatType": "text alignment",
    "value" : "right"
  }
]

Есть мысли?

Ответы [ 5 ]

3 голосов
/ 07 января 2020

Используя библиотеку Gson , вы можете отобразить json в объекте Java.

Итак, вы должны создать класс, подобный этому:

public class MyObject{
    private String formatType;
    private String value;

    //Constuctors, Getter and Setter...
    //.....
    //.....
}

После использования метода fromJson вы можете создать массив MyObject.

Gson gson = new Gson();
MyObject[] array = gson.fromJson(new FileReader("file.json"), MyObject[].class);
3 голосов
/ 07 января 2020

Вы также можете использовать библиотеку json4s, как показано ниже:

import org.json4s._
import org.json4s.jackson.JsonMethods._

val json = """{
     "data":[
            {
                "formatType": "text",
                "value": "bgyufcie huis huids hufhsduhfsl hd"
            },
            {
                "formatType": "text size",
                "value": 12
            },
            {
                "formatType": "text alignment",
                "value" : "right"
             }
             ]
}"""

val parsed = parse(json)

val value = (parsed \ "data" \\ classOf[JObject]).filter(m => m("formatType") == "text alignment")(0)("value")

// value: Any = right

Фильтр (parsed \ "data" \\ classOf[JObject]) извлекает все элементы в список карт, т.е.:

List(
   Map(formatType -> text, value -> bgyufcie huis huids hufhsduhfsl hd), 
   Map(formatType -> text size, value -> 12), Map(formatType -> text alignment, value -> right)
).

Из тех, которые мы примените фильтр filter(m => m("formatType") == "text alignment"), чтобы получить запись, которая нам действительно нужна.

2 голосов
/ 26 февраля 2020

Использование Дижон FTW!

Вот тест, который демонстрирует, насколько легко можно найти "правильное" значение в образцах, подобных вашему:

import com.github.pathikrit.dijon._

val json = parse(
  """{
    |"data":[
    |  {
    |    "formatType": "text",
    |    "value": "bgyufcie huis huids hufhsduhfsl hd"
    |  },
    |  {
    |    "formatType": "text size",
    |    "value": 12
    |  },
    |  {
    |    "formatType": "text alignment",
    |    "value" : "right"
    |  }
    |]
    |}""".stripMargin)

assert(json.data.toSeq.collect { 
  case obj if obj.formatType == "text alignment" => obj.value 
}.head == "right")

2 голосов
/ 07 января 2020

Я бы использовал библиотеку Джексона, это очень полезно для анализа JSON. Вы можете прочитать JSON, используя ObjectMapper.

Вот полное руководство, чтобы начать: https://www.mkyong.com/java/jackson-how-to-parse-json/

1 голос
/ 26 февраля 2020

создайте многострочную строку JSON, затем проанализируйте эту строку непосредственно в объект Scala, используйте пакет net .liftweb для решения этой проблемы.

import net.liftweb.json._

object SarahEmailPluginConfigTest {

implicit val formats = DefaultFormats
case class Mailserver(url: String, username: String, password: String)

val json = parse(
"""
{ 
  "url": "imap.yahoo.com",
  "username": "myusername",
  "password": "mypassword"
}
"""
)

  def main(args: Array[String]) {
    val m = json.extract[Mailserver]
    println(m.url)
    println(m.username)
    println(m.password)
  }

}

https://alvinalexander.com/scala/simple-scala-lift-json-example-lift-framework

Ссылочная ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...