小编Ben*_*idt的帖子

spray-json JsString引用字符串值

我正在使用json-spray.似乎当我尝试打印解析的JsString值时,它包含字符串上的书籍结尾引号.

val x1 = """ {"key1": "value1", "key2": 4} """
println(x1.asJson)
println(x1.asJson.convertTo[Map[String, JsValue]])
Run Code Online (Sandbox Code Playgroud)

哪个输出:

{"key1":"value1","key2":4}
Map(key1 -> "value1", key2 -> 4)
Run Code Online (Sandbox Code Playgroud)

但这意味着key1的字符串值实际上是引用的,因为scala显示没有引号的字符串.即val k = "value1"输出:value1"value1".也许我做错了什么,但我能想出的最好的解决方法如下:

val m = x1.asJson.convertTo[Map[String, JsValue]]
val z = m.map({
    case(x,y) => {
        val ny = y.toString( x => x match {
            case v: JsString =>
                v.toString().tail.init
            case v =>
                v.toString()
        } )
        (x,ny)
    }})

println(z)
Run Code Online (Sandbox Code Playgroud)

哪个输出正确显示的字符串:

Map(key1 -> value1, key2 -> 4)
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案不适用于递归嵌套的JSON.有更好的解决方法吗?

json scala spray-json

7
推荐指数
2
解决办法
5662
查看次数

猪+ Hbase原子增量柱值

我正在尝试将Hbase原子增量列读入Pig并且可以将其作为Long值访问.

但是,列值使用Hbases十六进制结构:\ x00\x00\x00\x00\x00\x00\x00\x01

有没有人知道在Pig中转换它的方法变得等同于get_counter值:1

我使用UDF发布了一个解决方案:

import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.backend.executionengine.ExecException;
import org.apache.pig.data.DataByteArray;
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.logicalLayer.schema.Schema;


public class ConvertToLong extends EvalFunc<Long> {

@Override
public Long exec(Tuple input) throws IOException {

    if (input == null || input.size() == 0) {
        return null;
    }

    try {

        long value = 0;
        DataByteArray dba = (DataByteArray)input.get(0);
        System.out.println( dba.toString() );
        byte[] ba = dba.get();

        for (int i = 0; i < ba.length; i++)
        {
            value = (value << 8) + (ba[i] & …
Run Code Online (Sandbox Code Playgroud)

hbase apache-pig

3
推荐指数
1
解决办法
1561
查看次数

标签 统计

apache-pig ×1

hbase ×1

json ×1

scala ×1

spray-json ×1