【问题标题】:how to merge two JSONArray with addAll如何将两个 JSONArray 与 addAll 合并
【发布时间】:2018-01-03 14:10:13
【问题描述】:

各位,我在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) 重载方法值添加替代方案: (x$1: E)Boolean (x$1: java.util._1)Boolean (x$1: (一些 其他)java.util._1)布尔值不能应用于(字符串) jsonArray.add("三")

并与 addAll 一致:

错误:(19, 15) 重载方法值 addAll 和替代方法: (x$1: java.util.Collection[_ <: e java.util.collection java.util.>1])布尔值 (x$1: java.util.Collection[ <: other jsonarray.addall>

你有什么想法吗?

【问题讨论】:

    标签: json scala


    【解决方案1】:

    如果您使用this library,我的第一个建议是停止使用它。它相当古老,可能早于 Java 泛型。它已经多年没有更新了。在Scala 中有许多现代且受支持的Java librarieslibraries written。看一看,然后挑一个。

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

    public class JSONArray extends ArrayList implements JSONAware, JSONStreamAware {
    

    看看它是如何只是ArrayList 而不是ArrayList&lt;String&gt;ArrayList&lt;Object&gt; 或类似的东西。我知道在 Scala 中解决这个问题的唯一方法是像这样执行显式转换:

    def main(args: Array[String]): Unit = {
      val jsonArray1 = new JSONArray()
      val javaArrayList1: ArrayList[Any] = jsonArray1.asInstanceOf[ArrayList[Any]]
      javaArrayList1.add("one")
      javaArrayList1.add("two")
      javaArrayList1.add("three")
    
      val jsonArray2 = new JSONArray()
      val javaArrayList2: ArrayList[Any] = jsonArray2.asInstanceOf[ArrayList[Any]]
      javaArrayList2.add("three")
      javaArrayList2.add("four")
    
      javaArrayList1.addAll(javaArrayList2)
      // and then use JSON-specifc methods via jsonArray1 
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-27
      • 2012-10-29
      • 2017-01-21
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2016-05-16
      相关资源
      最近更新 更多