无法将字符串转换为JsonArray

22

你如何将此字符串转换为gson.JsonArray?

String s= "[["110917    ", 3.0099999999999998, -0.72999999999999998, 2.8500000000000001, 2.96, 685.0, 38603.0], ["110917    ", 2.71, 0.20999999999999999, 2.8199999999999998, 2.8999999999999999, 2987.0, 33762.0]]";

这是我的代码:

 com.google.gson.*;
 public static void main(String[] args)
   {
       //Declared S here
       System.out.println("String to Json Array Stmt");
       JsonParser parser = new JsonParser();
       JsonElement tradeElement = parser.parse(s.toString());
       JsonArray trade = tradeElement.getAsJsonArray();
       System.out.println(trade);
    }

这是将这个集合字符串转换为JsonArray的方式吗?


com.google.gson.JsonArray;我正在使用的库是gson。 - Nava
3个回答

47

要在您的JSON数组中有一个字符串值,您必须记得在Java程序中反斜杠转义双引号。请参见下面的s声明。

String s = "[[\"110917       \", 3.0099999999999998, -0.72999999999999998, 2.8500000000000001, 2.96, 685.0, 38603.0], [\"110917    \", 2.71, 0.20999999999999999, 2.8199999999999998, 2.8999999999999999, 2987.0, 33762.0]]";

你在main()方法中的代码运行良好。下面只是对你在main()方法中代码的轻微修改。

System.out.println("String to Json Array Stmt");
JsonParser parser = new JsonParser();
JsonElement tradeElement = parser.parse(s);
JsonArray trade = tradeElement.getAsJsonArray();
System.out.println(trade);

最后,记得在下面所示的代码中使用关键词“import”来给你的语句“com.google.gson.*”加上前缀。

import com.google.gson.*;

这里的问题是将错别字误认为是导入。实际上,它已经添加到源代码中了。谢谢。 - Nava
能否分割JsonArray? - Nava
你的意思是获取JsonArray“trade”的第一个元素(["110917 ", 3.0099999999999998, -0.72999999999999998, 2.8500000000000001, 2.96, 685.0, 38603.0])吗?尝试使用“trade.get(0)”来实现。 - AaronYC

11

我没看出有什么问题。这段代码在我的电脑上可以正常运行:

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;


public class GsonExample {
    public static void main(String[] args) {
        String s= "[[\"110917\", 3.0099999999999998, -0.72999999999999998," +
                "2.8500000000000001, 2.96, 685.0, 38603.0], [\"110917\", 2.71," +
                "0.20999999999999999, 2.8199999999999998, 2.8999999999999999," +
                "2987.0, 33762.0]]";


        JsonParser  parser = new JsonParser();
        JsonElement elem   = parser.parse( s );

        JsonArray elemArr = elem.getAsJsonArray();
        System.out.println( elemArr );
    }
}

唯一的问题可能是您在字符串文字 s 中未正确转义双引号。


请问为什么在这里我们需要在字符串前面添加/(反斜杠)? - Nava
我只想要第一个列表作为JSON数组?可以传递吗? - Nava
反斜杠用于转义“字符。如果您不这样做,编译器就无法知道您不打算以关闭“结束字符串。请参见:http://en.wikipedia.org/wiki/Escape_character。 - Mike Kwan
例如,elemArr.get( index ) 可以用于返回数组的第一个元素。 - Mike Kwan

4

上述答案已经过时。我们需要调用静态方法。以下是可行的代码。

JsonArray outputJsonArray = JsonParser.parseString(pasteYourStringHere).getAsJsonArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接