如何将两个JSONArray与addAll

时间:2018-01-03 14:10:13

标签: json scala

每个人,我在java中使用这段代码来合并两个org.json.simple.JSONArray并且它完美地运行:

import java.io.IOException;

import org.json.simple.JSONArray;

public class MergeJsonArrays {

  /**
   * @param args
   * @throws IOException 
   */
  public static void main(String[] args) throws IOException {

    JSONArray jsonArray = new JSONArray();
    jsonArray.add("one");
    jsonArray.add("two");
    jsonArray.add("three");

    JSONArray jsonArray2 = new JSONArray();
    jsonArray2.add("three");
    jsonArray2.add("four");

    jsonArray.addAll(jsonArray2);
    System.out.println(jsonArray);
  }

}

我想在scala中转换此代码,所以它看起来像这样:

import org.json.simple.JSONArray

/**
  * Created by Administrator on 03/01/2018.
  */
object Main {
  def main(args: Array[String]): Unit = {
    var jsonArray = new JSONArray
    jsonArray.add("one");
    jsonArray.add("two")
    jsonArray.add("three")

    var jsonArray2 = new JSONArray()
    jsonArray2.add("three")
    jsonArray2.add("four")

    jsonArray.addAll(jsonArray2)
  }
}

我在添加的行中出现错误:

  

错误:(13,15)重载方法值add with alternatives:(x $ 1:   E)布尔值(x $ 1:java.util._1)布尔值(x $ 1 :(有些   其他)java.util._1)布尔值不能应用于(String)       jsonArray.add("三&#34)

并与addAll:

一致
  

错误:(19,15)重载方法值addAll与备选方案:         (x $ 1:java.util.Collection [_<:E])布尔值         (x $ 1:java.util.Collection [_<:java.util。 1])布尔值         (x $ 1:java.util.Collection [< :(其他一些)java.util._1])布尔值        无法应用于(org.json.simple.JSONArray)           jsonArray.addAll(jsonArray2)

你知道吗?

1 个答案:

答案 0 :(得分:1)

如果您使用this library,我的第一个建议是停止这样做。它很老,可能早于Java泛型。它多年没有更新。 Java中有许多现代且受支持的libraries libraries以及written Scala。看看,选择一个。

如果由于一些神秘的原因你必须在Scala中使用那个古老的库,你将需要一些黑客攻击。问题是Scala被设计为比Java更安全,因此当根本没有指定泛型类型时它不能很好地工作。这正是JSONArray

所发生的情况
org.eclipse.jetty.websocket:javax-websocket-server-impl

了解它仅仅是public class JSONArray extends ArrayList implements JSONAware, JSONStreamAware { 而不是ArrayListArrayList<String>或类似的东西。在Scala中解决这个问题的唯一方法就是执行这样的显式转换:

ArrayList<Object>