由于与我正在处理的项目相关的原因,我希望将JSON文件的整个查询保存为字符串,例如,$.store.book[*].title(而不是必须将文档的每个级别临时存储为单独的对象) .
我目前正在使用JsonPath(版本0.8.0,这是我能找到的最新版本),这基本上正是我正在寻找的,但我得到的例外情况如下所示.我只是使用JsonPath谷歌代码页上给出的示例JSON,使用他们的一个示例查询.
我在这做错了什么?或者,如果没有解决方案,Java中是否有JsonPath的替代方案?我希望能够将整个查询作为字符串传递,并且它必须是Java.
功能:
public void testJsonPath() throws Exception
{
String query = "$.store.book[*].title";
List toRet = (List) JsonPath.read(practiceJson, query, new Filter[0]);
System.out.println(toRet.toString());
}
Run Code Online (Sandbox Code Playgroud)
例外:
java.lang.NoClassDefFoundError: net/minidev/json/parser/ParseException
at com.jayway.jsonpath.spi.JsonProviderFactory$1.create(JsonProviderFactory.java:27)
at com.jayway.jsonpath.spi.JsonProviderFactory.createProvider(JsonProviderFactory.java:32)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:202)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:307)
at net.windward.datasource.test.TestJsonDataSource.testJsonPath(TestJsonDataSource.java:119)
Run Code Online (Sandbox Code Playgroud)
练习JSON:
private String practiceJson = "{\n" +
" \"store\": {\n" +
" \"book\": [ {\n" +
" \"category\": \"reference\",\n" +
" \"author\": \"Nigel Rees\",\n" +
" \"title\": \"Sayings of the Century\",\n" +
" \"price\": 8.95\n" +
" }, {\n" + …Run Code Online (Sandbox Code Playgroud) 我需要在C#中编写一个函数,它接受java.util.Map并将其转换为C#字典.(我正在开发的项目使用IKVM在C#中使用一些Java类.)
我尝试过使用foreach循环(例如,foreach (java.util.Map.Entry in map)或者foreach (string key in map.keySet())逐个元素地添加到Dictionary中,但似乎Java Maps和Sets不可枚举.
我最好的方法是什么?我应该使用java.util.Iterator吗?(我不反对原则上使用Java Iterator,但感觉应该有一个更干净,更"尖锐的"方式.)我想我可以得到keySet,使用Set方法toArray() ,并通过迭代是,但再次,它不觉得"升C-Y".我应该克服自己并做其中一件事,还是有更好的方法?(或者,在这两个选项中,在时间/空间方面效率更高?)
作为参考,这里是我正在尝试做的草图:
public Dictionary<string, object> convertMap(java.util.Map map)
{
Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (String key in map.keySet()) // doesn't work; map is not enumerable
dict.Add(key, map.get(key));
return dict;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用GifBitmapEncoder选择的BitmapFrame对象在C#中创建一个GIF动画,但我希望能够自己设置帧速率.有没有办法做到这一点?如果没有,它将自动设置为什么(这样我才能知道需要将多少帧放入编码器中)?
有没有办法在Rust中一次将多个条目插入HashMap?或者用多个条目初始化它?除了手动调用insert您插入的每个元素之外的任何其他内容?
编辑使用英文字母频率的示例:
我基本上想要:
let frequencies = {
'a': 0.08167,
'b': 0.01492,
...
'z': 0.00074
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过执行类似下面的for循环来实现相同的结果,但我想知道是否有办法在不创建其他数组然后循环它们的情况下执行此操作,或者通常是更优雅的解决方案.
let mut frequencies = HashMap::new();
let letters = ['a','b','c', ...... 'z'];
let freqs = [0.08167, 0.01492, 0.02782, ......., 0.00074];
for i in 0..26 {
frequencies.insert(letters[i], freqs[i]);
}
Run Code Online (Sandbox Code Playgroud)
对于一个文字,我可以使用这里的答案,这可能适用于这个例子,但我很好奇是否有一种方法可以做到这一点,如果它是一个文字,以防将来出现.
我是C#的新手,来自Java,我想检查某个对象是否是一个数字(可以是整数,双精度,浮点数等).在Java中,我这样说if (toRet instanceof Number).我希望有一个类似C#的东西,if (toRet is Number)但到目前为止我还没能找到一个这样做的Number类.有没有办法做到这一点,还是我必须手动检查Integer,Double等?
编辑更多信息:基本上我想要做的是最终有一个字节数组.但是,当数组存储在文本文件中时,我使用的解析器有时会认为它是整数数组或双数组.在Java中,我有这个:
JSONArray dblist = (JSONArray)result_;
byte[] reallyToRet = new byte[dblist.size()];
Object toComp = dblist.get(0);
if (toComp instanceof Number)
for (int i=0; i < dblist.size(); ++i) {
byte elem = ((Number) dblist.get(i)).byteValue();
reallyToRet[i] = elem;
}
return reallyToRet;
}
Run Code Online (Sandbox Code Playgroud)
这里重要的是if语句.有时,对象dblist将作为整数解析,有时作为双精度解析,很少作为字节解析,但最后我真正关心的是字节值.
您可以String使用contains搜索模式的方法来执行此操作,但是Vec::contains针对单个元素.
我能够做到这一点的唯一方法是直接实现某种子串函数,但我有点希望有一种内置方式.
let vec1 = vec![1, 2, 3, 4, 5];
let vec2 = vec![2, 3]; // vec2 IS a substring of vec1
let vec3 = vec![1, 5]; // vec3 is NOT a substring of vec3
fn is_subvec(mainvec: &Vec<i32>, subvec: &Vec<i32>) -> bool {
if subvec.len() == 0 { return true; }
if mainvec.len() == 0 { return false; }
'outer: for i in 0..mainvec.len() {
for j in 0..subvec.len() {
if mainvec[i+j] != subvec[j] …Run Code Online (Sandbox Code Playgroud)