Jython Scala数组/列表在python脚本中不可JSON序列化

2024-10-01 07:50:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Scala类,它用getter和setter包装avro记录。使用Jython允许用户编写python脚本来处理Avro记录,并最终对新处理的记录执行json.dumps

问题是,如果用户想要从记录中获取一个数组值,解释器会抱怨该对象不可JSON序列化

import json
json.dumps(<AClass>.getArray('myArray'))

AClass在运行时可用于任何给定的python脚本。Scala AClass:

class AClass {
  def getArray(fieldName: String): Array[Integer] = { 
    val value: GenericData.Array[T] = [....]
        value
      .asInstanceOf[GenericData.Array[T]]
      .asScala
      .toArray[T]
  }
}

我尝试了其他几种返回类型,1)List[Integer],2)mutable.Buffer[Integer],只是普通的Avro泛型数组3)GenericData.Array[T]。对于略有不同的对象,所有对象都会出现相同的序列化错误:

  1. Runtime exception occurred during Python processing. TypeError: List(1, 2, 3) is not JSON serializable.
  2. ... Buffer(1, 2, 3) is not JSON serializable
  3. ... [1, 2, 3] is not JSON serializable.

现在看来,如果我们将它从python脚本中转换为list(),它就可以正常工作了。这提供了一些线索,但需要在Scala级别实现

import json
json.dumps(list(<AClass>.getArray('myArray')))

有没有办法做到这一点?什么Scala/Java列表类型将直接转换为pythonlist类型和/或可在Jython py解释器中进行JSON序列化


Tags: 对象脚本json类型序列化is记录integer