Scala将Json播放到OrderdMap

时间:2017-06-11 19:18:43

标签: json scala

我是斯卡拉的新手。我正在尝试将JSON转换为有序的Map,它应该具有插入顺序的值。但编译器说我只能转换为Map,而不能转换为ListMap,并要求我实现隐式Read或格式。

但我想知道有没有什么方法可以直接使用一些现有函数,因为我们有JSON到Map转换?我还检查了SprayJson和其他的选项,但看起来没有现有的JSON函数可用于有序集合。

if ($(window).scrollTop() == ($(document).height() - $(window).height())){
   ready=false;
   $.ajax({
      url: "/home/scroll/loadcontent/",
      method: "get",
      data: { 
          posts: str
     },
     dataType: "json",
     success: function(response) {

         $("#col1").children('#tiles').append(response.col1);
         $("#col1").children('#tiles').append(response.col4);
         $("#col2").children('#tiles').append(response.col2);
         $("#col2").children('#tiles').append(response.col5);
         $("#col3").children('#tiles').append(response.col3);
         $("#col3").children('#tiles').append(response.col6);

       }
    })
    .always(function(){
        ready = true; //Reset the flag here
    });
 }

window.onscroll=yHandler

1 个答案:

答案 0 :(得分:0)

Json对象的键没有排序,因此Json对象的键,值可以按任何顺序重试,因此不能保证订购。 仅在不在对象中的数组中维护排序。所以你必须将Json对象更改为Json数组才能实现这一点,如下所示

scala> import scala.collection.immutable.ListMap
import scala.collection.immutable.ListMap

scala> import play.api.libs.json._
import play.api.libs.json._

scala> val jsonString = """[{"F1":{"A" : "a"}}, {"F2":{"B" : "b"}}, {"F3":{"C" : "c"}}, {"F4":{"D" : "d"}}, {"F5":{"E" : "e"}}]"""
jsonString: String = [{"F1":{"A" : "a"}}, {"F2":{"B" : "b"}}, {"F3":{"C" : "c"}}, {"F4":{"D" : "d"}}, {"F5":{"E" : "e"}}]

scala> val list = Json.parse(jsonString).as[List[Map[String, Map[String, String]]]].flatten.foldLeft(ListMap[String,Map[String, String]]())({ case (arr,(key, value)) => arr + (key -> value)})
list: scala.collection.immutable.ListMap[String,Map[String,String]] = Map(F1 -> Map(A -> a), F2 -> Map(B -> b), F3 -> Map(C -> c), F4 -> Map(D -> d), F5 -> Map(E -> e))