JsonPath JUnit 点的转义字符

springJS

1个回答

写回答

言小五

2025-07-07 03:10

+ 关注

JS
JS

JSonPath是一个用于查找和提取JSON文档中特定数据的工具。它提供了一种简洁而强大的方式来通过路径表达式来定位和访问JSON对象的属性。在本文中,我们将介绍如何在JUnit测试中使用JSonPath来进行断言和验证。

首先,让我们来看看如何在JUnit中使用JSonPath。我们需要添加相应的依赖项到我们的项目中,如下所示:

XML

<dependency>

<groupId>com.jayway.JSonpath</groupId>

<artifactId>JSon-path</artifactId>

<version>2.5.0</version>

<scope>test</scope>

</dependency>

接下来,我们可以编写我们的测试用例。假设我们有一个JSON对象如下所示:

JSon

{

"name": "John",

"age": 30,

"address": {

"street": "123 MAIn St",

"city": "New York",

"state": "NY"

}

}

我们可以使用JSonPath来提取和验证这些属性。例如,我们可以使用以下代码来获取"name"属性的值:

Java

import com.jayway.JSonpath.JSonPath;

import org.junit.Assert;

import org.junit.Test;

public class JSonPathTest {

@Test

public void testGetName() {

String JSon = "{\"name\": \"John\", \"age\": 30}";

String name = JSonPath.read(JSon, "$.name");

Assert.assertEquals("John", name);

}

}

在上面的代码中,我们使用JSonPath.read()方法来解析JSON并提取"name"属性的值。然后,我们使用JUnit的断言方法来验证提取的值是否与预期值相等。

除了提取属性的值,JSonPath还提供了许多其他功能,例如根据条件过滤和排序结果,提取嵌套属性等。我们可以使用JSonPath的各种表达式来满足我们的需求。

案例代码:使用JSonPath提取嵌套属性

Java

import com.jayway.JSonpath.JSonPath;

import org.junit.Assert;

import org.junit.Test;

public class JSonPathTest {

@Test

public void testGetAddress() {

String JSon = "{\"name\": \"John\", \"age\": 30, \"address\": {\"street\": \"123 MAIn St\", \"city\": \"New York\", \"state\": \"NY\"}}";

String street = JSonPath.read(JSon, "$.address.street");

Assert.assertEquals("123 MAIn St", street);

String city = JSonPath.read(JSon, "$.address.city");

Assert.assertEquals("New York", city);

String state = JSonPath.read(JSon, "$.address.state");

Assert.assertEquals("NY", state);

}

}

在上面的代码中,我们使用JSonPath来提取嵌套在"address"属性中的"street"、"city"和"state"属性的值,并使用断言来验证提取的值是否与预期值相等。

使用JSonPath进行条件过滤

除了提取特定属性的值,我们还可以使用JSonPath来进行条件过滤。例如,我们可以使用以下代码来查找年龄大于等于30的人的姓名:

Java

import com.jayway.JSonpath.JSonPath;

import org.junit.Assert;

import org.junit.Test;

import Java.util.List;

public class JSonPathTest {

@Test

public void testFilterByAge() {

String JSon = "[{\"name\": \"John\", \"age\": 30}, {\"name\": \"Jane\", \"age\": 25}, {\"name\": \"Mike\", \"age\": 35}]";

List<String> names = JSonPath.read(JSon, "$[?(@.age >= 30)].name");

Assert.assertEquals(2, names.size());

Assert.assertTrue(names.contAIns("John"));

Assert.assertTrue(names.contAIns("Mike"));

}

}

在上面的代码中,我们使用JSonPath的过滤器表达式"?(@.age >= 30)"来过滤出年龄大于等于30的人,并提取他们的姓名。然后,我们使用断言来验证过滤和提取的结果是否与预期值相等。

使用JSonPath排序结果

除了提取和过滤,我们还可以使用JSonPath来对结果进行排序。例如,我们可以使用以下代码来按年龄对人员进行升序排序:

Java

import com.jayway.JSonpath.JSonPath;

import org.junit.Assert;

import org.junit.Test;

import Java.util.List;

public class JSonPathTest {

@Test

public void testSortByAge() {

String JSon = "[{\"name\": \"John\", \"age\": 30}, {\"name\": \"Jane\", \"age\": 25}, {\"name\": \"Mike\", \"age\": 35}]";

List<String> names = JSonPath.read(JSon, "$.name");

List<Integer> ages = JSonPath.read(JSon, "$.age");

names.sort(String::compareTo);

ages.sort(Integer::compareTo);

Assert.assertEquals("Jane", names.get(0));

Assert.assertEquals("John", names.get(1));

Assert.assertEquals("Mike", names.get(2));

Assert.assertEquals(25, ages.get(0).intValue());

Assert.assertEquals(30, ages.get(1).intValue());

Assert.assertEquals(35, ages.get(2).intValue());

}

}

在上面的代码中,我们使用JSonPath分别提取姓名和年龄的列表,并对它们进行排序。然后,我们使用断言来验证排序后的结果是否与预期值相等。

在本文中,我们介绍了如何在JUnit测试中使用JSonPath来提取和验证JSON文档中的特定数据。我们还演示了如何使用JSonPath进行条件过滤和排序结果。JSonPath是一个强大而灵活的工具,可以帮助我们更轻松地处理和操作JSON数据。通过使用JSonPath和JUnit,我们可以编写简洁而强大的测试用例来验证我们的代码逻辑。希望本文对您理解和使用JSonPath有所帮助。

参考代码

Java

import com.jayway.JSonpath.JSonPath;

import org.junit.Assert;

import org.junit.Test;

public class JSonPathTest {

@Test

public void testGetName() {

String JSon = "{\"name\": \"John\", \"age\": 30}";

String name = JSonPath.read(JSon, "$.name");

Assert.assertEquals("John", name);

}

@Test

public void testGetAddress() {

String JSon = "{\"name\": \"John\", \"age\": 30, \"address\": {\"street\": \"123 MAIn St\", \"city\": \"New York\", \"state\": \"NY\"}}";

String street = JSonPath.read(JSon, "$.address.street");

Assert.assertEquals("123 MAIn St", street);

String city = JSonPath.read(JSon, "$.address.city");

Assert.assertEquals("New York", city);

String state = JSonPath.read(JSon, "$.address.state");

Assert.assertEquals("NY", state);

}

@Test

public void testFilterByAge() {

String JSon = "[{\"name\": \"John\", \"age\": 30}, {\"name\": \"Jane\", \"age\": 25}, {\"name\": \"Mike\", \"age\": 35}]";

List<String> names = JSonPath.read(JSon, "$[?(@.age >= 30)].name");

Assert.assertEquals(2, names.size());

Assert.assertTrue(names.contAIns("John"));

Assert.assertTrue(names.contAIns("Mike"));

}

@Test

public void testSortByAge() {

String JSon = "[{\"name\": \"John\", \"age\": 30}, {\"name\": \"Jane\", \"age\": 25}, {\"name\": \"Mike\", \"age\": 35}]";

List<String> names = JSonPath.read(JSon, "$.name");

List<Integer> ages = JSonPath.read(JSon, "$.age");

names.sort(String::compareTo);

ages.sort(Integer::compareTo);

Assert.assertEquals("Jane", names.get(0));

Assert.assertEquals("John", names.get(1));

Assert.assertEquals("Mike", names.get(2));

Assert.assertEquals(25, ages.get(0).intValue());

Assert.assertEquals(30, ages.get(1).intValue());

Assert.assertEquals(35, ages.get(2).intValue());

}

}

参考链接

- [JSonPath官方文档](JSon-path/JSonPath">https://github.com/JSon-path/JSonPath)

- [JUnit官方文档](https://junit.org/junit5/)

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号