mirror of
https://github.com/stleary/JSON-java.git
synced 2026-01-24 00:03:17 -05:00
Compare commits
37 Commits
20220320
...
98df35449a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98df35449a | ||
|
|
1be6ee31a7 | ||
|
|
a2d3d3c9b5 | ||
|
|
bf9219386a | ||
|
|
85495facbd | ||
|
|
7aba3ac941 | ||
|
|
d51250f6b0 | ||
|
|
9cb8e153bf | ||
|
|
80c1479ad8 | ||
|
|
444335d12a | ||
|
|
a2c0562e04 | ||
|
|
153972afdf | ||
|
|
4a8ff28fd8 | ||
|
|
fa457a4113 | ||
|
|
b7f708b222 | ||
|
|
12411b7981 | ||
|
|
61801c623e | ||
|
|
1915aab7c4 | ||
|
|
8439039da7 | ||
|
|
a6bdd081eb | ||
|
|
a30d71fdca | ||
|
|
cdd67b0aef | ||
|
|
89f6e7f6a6 | ||
|
|
346fb26f2d | ||
|
|
6daabb43ab | ||
|
|
57f785c42e | ||
|
|
3eecd67a3b | ||
|
|
5a587bbdfd | ||
|
|
e0534b3ec7 | ||
|
|
7dd9e01dae | ||
|
|
88ca19042b | ||
|
|
b4036e6a8e | ||
|
|
89f16ad0af | ||
|
|
6f92a3ab4e | ||
|
|
beae279b21 | ||
|
|
a642329314 | ||
|
|
9abb35ad39 |
2
.github/workflows/pipeline.yml
vendored
2
.github/workflows/pipeline.yml
vendored
@@ -42,7 +42,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
# build against supported Java LTS versions:
|
||||
java: [ 1.7, 8, 11 ]
|
||||
java: [ 8, 11 ]
|
||||
name: Java ${{ matrix.java }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
44
Examples.md
44
Examples.md
@@ -1,7 +1,7 @@
|
||||
<h1>Examples</h1>
|
||||
<p>Imports used in the examples: </p>
|
||||
|
||||
```
|
||||
```java
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
@@ -14,7 +14,7 @@ import java.util.Properties;
|
||||
|
||||
<h3>Using JSONArray</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void JSONExampleArray1() {
|
||||
//We create a JSONObject from a String containing an array using JSONArray
|
||||
//Firstly, we declare an Array in a String
|
||||
@@ -57,7 +57,7 @@ import java.util.Properties;
|
||||
return res;
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void JSONExampleArray2() {
|
||||
|
||||
//We can also create an Array without a String by creating an empty array and adding elements to it
|
||||
@@ -81,7 +81,7 @@ import java.util.Properties;
|
||||
|
||||
<h3>Using JSONStringer</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void JSONExampleStringer() {
|
||||
|
||||
//We initializate the JSONStringer
|
||||
@@ -116,7 +116,7 @@ import java.util.Properties;
|
||||
```
|
||||
<h3>Using JSONObject</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void JSONExampleObject1() {
|
||||
|
||||
//We can create a JSONObject from a String with the class builder
|
||||
@@ -127,7 +127,7 @@ import java.util.Properties;
|
||||
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void JSONExampleObject2() {
|
||||
|
||||
//We can also create a JSONObject directly without messing around with any of the other functions.
|
||||
@@ -151,7 +151,7 @@ import java.util.Properties;
|
||||
System.out.println("Final JSONOBject: " + example);
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void JSONExampleObject3() {
|
||||
|
||||
//We can also create a JSONObject with a Java Map
|
||||
@@ -170,7 +170,7 @@ import java.util.Properties;
|
||||
```
|
||||
<h3>Using JSONWriter</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void JSONExamplWriter() {
|
||||
|
||||
//This method works in a very similar way to Object and Stringer in the construction of the JSON.
|
||||
@@ -202,7 +202,7 @@ import java.util.Properties;
|
||||
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void JSONExampleTokener() {
|
||||
|
||||
//A partir de una String podemos crear un JSONTokener, que lo podemos usar alternativamente para JSONArray,JSONObject
|
||||
@@ -218,12 +218,12 @@ import java.util.Properties;
|
||||
}
|
||||
```
|
||||
<h2>Part 2: Conversion methods</h2>
|
||||
<p>We don't need to have a JSON docuemnt to work. This project also admits conversions from other type of files.</p>
|
||||
<p>We don't need to have a JSON document to work. This project also admits conversions from other type of files.</p>
|
||||
<p>Secondly, we can also convert from JSON to those type of files.</p>
|
||||
|
||||
<h3>Extra: Conversion to JSONArray</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void JSONObjectToArray() {
|
||||
//We start with a JSONObject
|
||||
|
||||
@@ -244,7 +244,7 @@ import java.util.Properties;
|
||||
```
|
||||
<h3>XML Conversions</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void XMLToExampleConversion() {
|
||||
|
||||
//We start with a JSONObject
|
||||
@@ -258,7 +258,7 @@ import java.util.Properties;
|
||||
System.out.println("Final XML: " + output);
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void XMLFromExampleConversion() {
|
||||
|
||||
//We start with a string with the XML format
|
||||
@@ -274,7 +274,7 @@ import java.util.Properties;
|
||||
```
|
||||
<h3>Cookie Conversions</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void CookieToExampleConversion() {
|
||||
|
||||
//We start with a JSONObject
|
||||
@@ -290,7 +290,7 @@ import java.util.Properties;
|
||||
System.out.println("Final Cookie: " + output);
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void CookieFromExampleConversion() {
|
||||
|
||||
//We start with a string with the Cookie format
|
||||
@@ -306,7 +306,7 @@ import java.util.Properties;
|
||||
|
||||
<h3>HTTP Conversions</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void HTTPToExampleConversion() {
|
||||
|
||||
//We start with a JSONObject
|
||||
@@ -322,7 +322,7 @@ import java.util.Properties;
|
||||
System.out.println("Final HTTP: " + output);
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void HTTPFromExampleConversion() {
|
||||
|
||||
//We start with a string with the HTTP format
|
||||
@@ -337,7 +337,7 @@ import java.util.Properties;
|
||||
```
|
||||
<h3>CDL Conversions</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static void CDLToExampleConversion() {
|
||||
|
||||
//We start with some JSONObjects with the same values in the keys but different values in the "values"
|
||||
@@ -360,7 +360,7 @@ private static void CDLToExampleConversion() {
|
||||
System.out.println("Final CDL: \r\n" + output);
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void CDLFromExampleConversion() {
|
||||
|
||||
//We start wtih a String with the CDL format
|
||||
@@ -377,7 +377,7 @@ private static void CDLFromExampleConversion() {
|
||||
```
|
||||
<h3>Properties Conversions</h3>
|
||||
|
||||
```
|
||||
```java
|
||||
private static Properties PropertyToExampleConversion() {
|
||||
|
||||
//We start with a JSONObject
|
||||
@@ -393,7 +393,7 @@ private static void CDLFromExampleConversion() {
|
||||
return output;
|
||||
}
|
||||
```
|
||||
```
|
||||
```java
|
||||
private static void PropertyFromExampleConversion() {
|
||||
|
||||
//We start with a Properties object
|
||||
@@ -408,7 +408,7 @@ private static void CDLFromExampleConversion() {
|
||||
```
|
||||
<h2>List of all examples methods</h2>
|
||||
|
||||
```
|
||||
```java
|
||||
public static void main(String[] args) {
|
||||
//JSONObjectToArray();
|
||||
//JSONExampleArray1();
|
||||
|
||||
23
LICENSE
23
LICENSE
@@ -1,23 +1,2 @@
|
||||
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ JSON in Java [package org.json]
|
||||
|
||||
[](https://mvnrepository.com/artifact/org.json/json)
|
||||
|
||||
**[Click here if you just want the latest release jar file.](https://search.maven.org/remotecontent?filepath=org/json/json/20220320/json-20220320.jar)**
|
||||
**[Click here if you just want the latest release jar file.](https://search.maven.org/remotecontent?filepath=org/json/json/20220924/json-20220924.jar)**
|
||||
|
||||
|
||||
# Overview
|
||||
@@ -28,8 +28,6 @@ Project goals include:
|
||||
|
||||
The files in this package implement JSON encoders and decoders. The package can also convert between JSON and XML, HTTP headers, Cookies, and CDL.
|
||||
|
||||
The license includes this restriction: ["The software shall be used for good, not evil."](https://en.wikipedia.org/wiki/Douglas_Crockford#%22Good,_not_Evil%22) If your conscience cannot live with that, then choose a different package.
|
||||
|
||||
# If you would like to contribute to this project
|
||||
|
||||
For more information on contributions, please see [CONTRIBUTING.md](https://github.com/stleary/JSON-java/blob/master/docs/CONTRIBUTING.md)
|
||||
|
||||
@@ -5,7 +5,9 @@ and artifactId "json". For example:
|
||||
[https://search.maven.org/search?q=g:org.json%20AND%20a:json&core=gav](https://search.maven.org/search?q=g:org.json%20AND%20a:json&core=gav)
|
||||
|
||||
~~~
|
||||
20220320 Recent commits
|
||||
20220924 New License - public domain, and some minor updates
|
||||
|
||||
20220320 Wrap StackOverflow with JSONException
|
||||
|
||||
20211205 Recent commits and some bug fixes for similar()
|
||||
|
||||
|
||||
29
pom.xml
29
pom.xml
@@ -3,7 +3,7 @@
|
||||
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20220320</version>
|
||||
<version>20220924</version>
|
||||
<packaging>bundle</packaging>
|
||||
|
||||
<name>JSON in Java</name>
|
||||
@@ -18,10 +18,6 @@
|
||||
This is a reference implementation. There is a large number of JSON packages
|
||||
in Java. Perhaps someday the Java community will standardize on one. Until
|
||||
then, choose carefully.
|
||||
|
||||
The license includes this restriction: "The software shall be used for good,
|
||||
not evil." If your conscience cannot live with that, then choose a different
|
||||
package.
|
||||
</description>
|
||||
<url>https://github.com/douglascrockford/JSON-java</url>
|
||||
|
||||
@@ -39,28 +35,9 @@
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The JSON License</name>
|
||||
<url>http://json.org/license.html</url>
|
||||
<name>Public Domain</name>
|
||||
<url>https://github.com/stleary/JSON-java/blob/master/LICENSE</url>
|
||||
<distribution>repo</distribution>
|
||||
<comments>Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
||||
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
</comments>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,27 +3,7 @@ package org.json;
|
||||
import java.util.Locale;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -288,7 +268,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
.equalsIgnoreCase("true"))) {
|
||||
return true;
|
||||
}
|
||||
throw wrongValueFormatException(index, "boolean", null);
|
||||
throw wrongValueFormatException(index, "boolean", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -309,7 +289,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
try {
|
||||
return Double.parseDouble(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(index, "double", e);
|
||||
throw wrongValueFormatException(index, "double", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -331,7 +311,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
try {
|
||||
return Float.parseFloat(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(index, "float", e);
|
||||
throw wrongValueFormatException(index, "float", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -353,7 +333,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
}
|
||||
return JSONObject.stringToNumber(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(index, "number", e);
|
||||
throw wrongValueFormatException(index, "number", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,7 +358,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
// If it did, I would re-implement this with the Enum.valueOf
|
||||
// method and place any thrown exception in the JSONException
|
||||
throw wrongValueFormatException(index, "enum of type "
|
||||
+ JSONObject.quote(clazz.getSimpleName()), null);
|
||||
+ JSONObject.quote(clazz.getSimpleName()), opt(index), null);
|
||||
}
|
||||
return val;
|
||||
}
|
||||
@@ -441,7 +421,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
try {
|
||||
return Integer.parseInt(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(index, "int", e);
|
||||
throw wrongValueFormatException(index, "int", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,7 +440,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
if (object instanceof JSONArray) {
|
||||
return (JSONArray) object;
|
||||
}
|
||||
throw wrongValueFormatException(index, "JSONArray", null);
|
||||
throw wrongValueFormatException(index, "JSONArray", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -478,7 +458,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
if (object instanceof JSONObject) {
|
||||
return (JSONObject) object;
|
||||
}
|
||||
throw wrongValueFormatException(index, "JSONObject", null);
|
||||
throw wrongValueFormatException(index, "JSONObject", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -499,7 +479,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
try {
|
||||
return Long.parseLong(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(index, "long", e);
|
||||
throw wrongValueFormatException(index, "long", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -517,7 +497,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
if (object instanceof String) {
|
||||
return (String) object;
|
||||
}
|
||||
throw wrongValueFormatException(index, "String", null);
|
||||
throw wrongValueFormatException(index, "String", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1386,6 +1366,10 @@ public class JSONArray implements Iterable<Object> {
|
||||
if (!JSONObject.isNumberSimilar((Number)valueThis, (Number)valueOther)) {
|
||||
return false;
|
||||
}
|
||||
} else if (valueThis instanceof JSONString && valueOther instanceof JSONString) {
|
||||
if (!((JSONString) valueThis).toJSONString().equals(((JSONString) valueOther).toJSONString())) {
|
||||
return false;
|
||||
}
|
||||
} else if (!valueThis.equals(valueOther)) {
|
||||
return false;
|
||||
}
|
||||
@@ -1464,6 +1448,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
* <small>(right bracket)</small>.
|
||||
* @throws JSONException if a called function fails
|
||||
*/
|
||||
@SuppressWarnings("resource")
|
||||
public String toString(int indentFactor) throws JSONException {
|
||||
StringWriter sw = new StringWriter();
|
||||
synchronized (sw.getBuffer()) {
|
||||
@@ -1513,6 +1498,7 @@ public class JSONArray implements Iterable<Object> {
|
||||
* @return The writer.
|
||||
* @throws JSONException if a called function fails or unable to write
|
||||
*/
|
||||
@SuppressWarnings("resource")
|
||||
public Writer write(Writer writer, int indentFactor, int indent)
|
||||
throws JSONException {
|
||||
try {
|
||||
@@ -1680,22 +1666,6 @@ public class JSONArray implements Iterable<Object> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new JSONException in a common format for incorrect conversions.
|
||||
* @param idx index of the item
|
||||
* @param valueType the type of value being coerced to
|
||||
* @param cause optional cause of the coercion failure
|
||||
* @return JSONException that can be thrown.
|
||||
*/
|
||||
private static JSONException wrongValueFormatException(
|
||||
int idx,
|
||||
String valueType,
|
||||
Throwable cause) {
|
||||
return new JSONException(
|
||||
"JSONArray[" + idx + "] is not a " + valueType + "."
|
||||
, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new JSONException in a common format for incorrect conversions.
|
||||
* @param idx index of the item
|
||||
@@ -1708,8 +1678,19 @@ public class JSONArray implements Iterable<Object> {
|
||||
String valueType,
|
||||
Object value,
|
||||
Throwable cause) {
|
||||
if(value == null) {
|
||||
return new JSONException(
|
||||
"JSONArray[" + idx + "] is not a " + valueType + " (" + value + ")."
|
||||
"JSONArray[" + idx + "] is not a " + valueType + " (null)."
|
||||
, cause);
|
||||
}
|
||||
// don't try to toString collections or known object types that could be large.
|
||||
if(value instanceof Map || value instanceof Iterable || value instanceof JSONObject) {
|
||||
return new JSONException(
|
||||
"JSONArray[" + idx + "] is not a " + valueType + " (" + value.getClass() + ")."
|
||||
, cause);
|
||||
}
|
||||
return new JSONException(
|
||||
"JSONArray[" + idx + "] is not a " + valueType + " (" + value.getClass() + " : " + value + ")."
|
||||
, cause);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2008 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,31 +1,10 @@
|
||||
package org.json;
|
||||
|
||||
import java.io.Closeable;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
@@ -166,6 +145,10 @@ public class JSONObject {
|
||||
*/
|
||||
private final Map<String, Object> map;
|
||||
|
||||
public Class<? extends Map> getMapType() {
|
||||
return map.getClass();
|
||||
}
|
||||
|
||||
/**
|
||||
* It is sometimes more convenient and less ambiguous to have a
|
||||
* <code>NULL</code> object than to use Java's <code>null</code> value.
|
||||
@@ -609,7 +592,7 @@ public class JSONObject {
|
||||
// JSONException should really take a throwable argument.
|
||||
// If it did, I would re-implement this with the Enum.valueOf
|
||||
// method and place any thrown exception in the JSONException
|
||||
throw wrongValueFormatException(key, "enum of type " + quote(clazz.getSimpleName()), null);
|
||||
throw wrongValueFormatException(key, "enum of type " + quote(clazz.getSimpleName()), opt(key), null);
|
||||
}
|
||||
return val;
|
||||
}
|
||||
@@ -635,7 +618,7 @@ public class JSONObject {
|
||||
.equalsIgnoreCase("true"))) {
|
||||
return true;
|
||||
}
|
||||
throw wrongValueFormatException(key, "Boolean", null);
|
||||
throw wrongValueFormatException(key, "Boolean", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -697,7 +680,7 @@ public class JSONObject {
|
||||
try {
|
||||
return Double.parseDouble(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(key, "double", e);
|
||||
throw wrongValueFormatException(key, "double", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -719,7 +702,7 @@ public class JSONObject {
|
||||
try {
|
||||
return Float.parseFloat(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(key, "float", e);
|
||||
throw wrongValueFormatException(key, "float", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -741,7 +724,7 @@ public class JSONObject {
|
||||
}
|
||||
return stringToNumber(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(key, "number", e);
|
||||
throw wrongValueFormatException(key, "number", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -763,7 +746,7 @@ public class JSONObject {
|
||||
try {
|
||||
return Integer.parseInt(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(key, "int", e);
|
||||
throw wrongValueFormatException(key, "int", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -781,7 +764,7 @@ public class JSONObject {
|
||||
if (object instanceof JSONArray) {
|
||||
return (JSONArray) object;
|
||||
}
|
||||
throw wrongValueFormatException(key, "JSONArray", null);
|
||||
throw wrongValueFormatException(key, "JSONArray", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -798,7 +781,7 @@ public class JSONObject {
|
||||
if (object instanceof JSONObject) {
|
||||
return (JSONObject) object;
|
||||
}
|
||||
throw wrongValueFormatException(key, "JSONObject", null);
|
||||
throw wrongValueFormatException(key, "JSONObject", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -819,7 +802,7 @@ public class JSONObject {
|
||||
try {
|
||||
return Long.parseLong(object.toString());
|
||||
} catch (Exception e) {
|
||||
throw wrongValueFormatException(key, "long", e);
|
||||
throw wrongValueFormatException(key, "long", object, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -875,7 +858,7 @@ public class JSONObject {
|
||||
if (object instanceof String) {
|
||||
return (String) object;
|
||||
}
|
||||
throw wrongValueFormatException(key, "string", null);
|
||||
throw wrongValueFormatException(key, "string", object, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1201,13 +1184,12 @@ public class JSONObject {
|
||||
}
|
||||
if (exact) {
|
||||
return new BigDecimal(((Number)val).doubleValue());
|
||||
}else {
|
||||
}
|
||||
// use the string constructor so that we maintain "nice" values for doubles and floats
|
||||
// the double constructor will translate doubles to "exact" values instead of the likely
|
||||
// intended representation
|
||||
return new BigDecimal(val.toString());
|
||||
}
|
||||
}
|
||||
if (val instanceof Long || val instanceof Integer
|
||||
|| val instanceof Short || val instanceof Byte){
|
||||
return new BigDecimal(((Number) val).longValue());
|
||||
@@ -2021,6 +2003,7 @@ public class JSONObject {
|
||||
* A String
|
||||
* @return A String correctly formatted for insertion in a JSON text.
|
||||
*/
|
||||
@SuppressWarnings("resource")
|
||||
public static String quote(String string) {
|
||||
StringWriter sw = new StringWriter();
|
||||
synchronized (sw.getBuffer()) {
|
||||
@@ -2141,7 +2124,11 @@ public class JSONObject {
|
||||
} else if (valueThis instanceof Number && valueOther instanceof Number) {
|
||||
if (!isNumberSimilar((Number)valueThis, (Number)valueOther)) {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
} else if (valueThis instanceof JSONString && valueOther instanceof JSONString) {
|
||||
if (!((JSONString) valueThis).toJSONString().equals(((JSONString) valueOther).toJSONString())) {
|
||||
return false;
|
||||
}
|
||||
} else if (!valueThis.equals(valueOther)) {
|
||||
return false;
|
||||
}
|
||||
@@ -2409,6 +2396,7 @@ public class JSONObject {
|
||||
* @throws JSONException
|
||||
* If the object contains an invalid number.
|
||||
*/
|
||||
@SuppressWarnings("resource")
|
||||
public String toString(int indentFactor) throws JSONException {
|
||||
StringWriter w = new StringWriter();
|
||||
synchronized (w.getBuffer()) {
|
||||
@@ -2502,10 +2490,8 @@ public class JSONObject {
|
||||
if (objectsRecord != null) {
|
||||
return new JSONObject(object, objectsRecord);
|
||||
}
|
||||
else {
|
||||
return new JSONObject(object);
|
||||
}
|
||||
}
|
||||
catch (JSONException exception) {
|
||||
throw exception;
|
||||
} catch (Exception exception) {
|
||||
@@ -2527,6 +2513,7 @@ public class JSONObject {
|
||||
return this.write(writer, 0, 0);
|
||||
}
|
||||
|
||||
@SuppressWarnings("resource")
|
||||
static final Writer writeValue(Writer writer, Object value,
|
||||
int indentFactor, int indent) throws JSONException, IOException {
|
||||
if (value == null || value.equals(null)) {
|
||||
@@ -2604,6 +2591,7 @@ public class JSONObject {
|
||||
* @throws JSONException if a called function has an error or a write error
|
||||
* occurs
|
||||
*/
|
||||
@SuppressWarnings("resource")
|
||||
public Writer write(Writer writer, int indentFactor, int indent)
|
||||
throws JSONException {
|
||||
try {
|
||||
@@ -2686,22 +2674,6 @@ public class JSONObject {
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new JSONException in a common format for incorrect conversions.
|
||||
* @param key name of the key
|
||||
* @param valueType the type of value being coerced to
|
||||
* @param cause optional cause of the coercion failure
|
||||
* @return JSONException that can be thrown.
|
||||
*/
|
||||
private static JSONException wrongValueFormatException(
|
||||
String key,
|
||||
String valueType,
|
||||
Throwable cause) {
|
||||
return new JSONException(
|
||||
"JSONObject[" + quote(key) + "] is not a " + valueType + "."
|
||||
, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new JSONException in a common format for incorrect conversions.
|
||||
* @param key name of the key
|
||||
@@ -2714,8 +2686,20 @@ public class JSONObject {
|
||||
String valueType,
|
||||
Object value,
|
||||
Throwable cause) {
|
||||
if(value == null) {
|
||||
|
||||
return new JSONException(
|
||||
"JSONObject[" + quote(key) + "] is not a " + valueType + " (" + value + ")."
|
||||
"JSONObject[" + quote(key) + "] is not a " + valueType + " (null)."
|
||||
, cause);
|
||||
}
|
||||
// don't try to toString collections or known object types that could be large.
|
||||
if(value instanceof Map || value instanceof Iterable || value instanceof JSONObject) {
|
||||
return new JSONException(
|
||||
"JSONObject[" + quote(key) + "] is not a " + valueType + " (" + value.getClass() + ")."
|
||||
, cause);
|
||||
}
|
||||
return new JSONException(
|
||||
"JSONObject[" + quote(key) + "] is not a " + valueType + " (" + value.getClass() + " : " + value + ")."
|
||||
, cause);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,27 +10,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2018 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2018 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2006 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.io.StringWriter;
|
||||
|
||||
@@ -8,27 +8,7 @@ import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,27 +5,7 @@ import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
Copyright (c) 2006 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.util.Enumeration;
|
||||
|
||||
@@ -1,32 +1,11 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2015 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Iterator;
|
||||
@@ -773,6 +752,28 @@ public class XML {
|
||||
*/
|
||||
public static String toString(final Object object, final String tagName, final XMLParserConfiguration config)
|
||||
throws JSONException {
|
||||
return toString(object, tagName, config, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a JSONObject into a well-formed, element-normal XML string,
|
||||
* either pretty print or single-lined depending on indent factor.
|
||||
*
|
||||
* @param object
|
||||
* A JSONObject.
|
||||
* @param tagName
|
||||
* The optional name of the enclosing tag.
|
||||
* @param config
|
||||
* Configuration that can control output to XML.
|
||||
* @param indentFactor
|
||||
* The number of spaces to add to each level of indentation.
|
||||
* @param indent
|
||||
* The current ident level in spaces.
|
||||
* @return
|
||||
* @throws JSONException
|
||||
*/
|
||||
private static String toString(final Object object, final String tagName, final XMLParserConfiguration config, int indentFactor, int indent)
|
||||
throws JSONException {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
JSONArray ja;
|
||||
JSONObject jo;
|
||||
@@ -782,9 +783,14 @@ public class XML {
|
||||
|
||||
// Emit <tagName>
|
||||
if (tagName != null) {
|
||||
sb.append(indent(indent));
|
||||
sb.append('<');
|
||||
sb.append(tagName);
|
||||
sb.append('>');
|
||||
if(indentFactor > 0){
|
||||
sb.append("\n");
|
||||
indent += indentFactor;
|
||||
}
|
||||
}
|
||||
|
||||
// Loop thru the keys.
|
||||
@@ -827,31 +833,39 @@ public class XML {
|
||||
sb.append('<');
|
||||
sb.append(key);
|
||||
sb.append('>');
|
||||
sb.append(toString(val, null, config));
|
||||
sb.append(toString(val, null, config, indentFactor, indent));
|
||||
sb.append("</");
|
||||
sb.append(key);
|
||||
sb.append('>');
|
||||
} else {
|
||||
sb.append(toString(val, key, config));
|
||||
sb.append(toString(val, key, config, indentFactor, indent));
|
||||
}
|
||||
}
|
||||
} else if ("".equals(value)) {
|
||||
sb.append(indent(indent));
|
||||
sb.append('<');
|
||||
sb.append(key);
|
||||
sb.append("/>");
|
||||
if(indentFactor > 0){
|
||||
sb.append("\n");
|
||||
}
|
||||
|
||||
// Emit a new tag <k>
|
||||
|
||||
} else {
|
||||
sb.append(toString(value, key, config));
|
||||
sb.append(toString(value, key, config, indentFactor, indent));
|
||||
}
|
||||
}
|
||||
if (tagName != null) {
|
||||
|
||||
// Emit the </tagName> close tag
|
||||
sb.append(indent(indent - indentFactor));
|
||||
sb.append("</");
|
||||
sb.append(tagName);
|
||||
sb.append('>');
|
||||
if(indentFactor > 0){
|
||||
sb.append("\n");
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
|
||||
@@ -870,15 +884,85 @@ public class XML {
|
||||
// XML does not have good support for arrays. If an array
|
||||
// appears in a place where XML is lacking, synthesize an
|
||||
// <array> element.
|
||||
sb.append(toString(val, tagName == null ? "array" : tagName, config));
|
||||
sb.append(toString(val, tagName == null ? "array" : tagName, config, indentFactor, indent));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
string = (object == null) ? "null" : escape(object.toString());
|
||||
return (tagName == null) ? "\"" + string + "\""
|
||||
: (string.length() == 0) ? "<" + tagName + "/>" : "<" + tagName
|
||||
+ ">" + string + "</" + tagName + ">";
|
||||
|
||||
string = (object == null) ? "null" : escape(object.toString());
|
||||
|
||||
if(tagName == null){
|
||||
return indent(indent) + "\"" + string + "\"" + ((indentFactor > 0) ? "\n" : "");
|
||||
} else if(string.length() == 0){
|
||||
return indent(indent) + "<" + tagName + "/>" + ((indentFactor > 0) ? "\n" : "");
|
||||
} else {
|
||||
return indent(indent) + "<" + tagName
|
||||
+ ">" + string + "</" + tagName + ">" + ((indentFactor > 0) ? "\n" : "");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a JSONObject into a well-formed, pretty printed element-normal XML string.
|
||||
*
|
||||
* @param object
|
||||
* A JSONObject.
|
||||
* @param indentFactor
|
||||
* The number of spaces to add to each level of indentation.
|
||||
* @return A string.
|
||||
* @throws JSONException Thrown if there is an error parsing the string
|
||||
*/
|
||||
public static String toString(Object object, int indentFactor){
|
||||
return toString(object, null, XMLParserConfiguration.ORIGINAL, indentFactor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a JSONObject into a well-formed, pretty printed element-normal XML string.
|
||||
*
|
||||
* @param object
|
||||
* A JSONObject.
|
||||
* @param tagName
|
||||
* The optional name of the enclosing tag.
|
||||
* @param indentFactor
|
||||
* The number of spaces to add to each level of indentation.
|
||||
* @return A string.
|
||||
* @throws JSONException Thrown if there is an error parsing the string
|
||||
*/
|
||||
public static String toString(final Object object, final String tagName, int indentFactor) {
|
||||
return toString(object, tagName, XMLParserConfiguration.ORIGINAL, indentFactor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a JSONObject into a well-formed, pretty printed element-normal XML string.
|
||||
*
|
||||
* @param object
|
||||
* A JSONObject.
|
||||
* @param tagName
|
||||
* The optional name of the enclosing tag.
|
||||
* @param config
|
||||
* Configuration that can control output to XML.
|
||||
* @param indentFactor
|
||||
* The number of spaces to add to each level of indentation.
|
||||
* @return A string.
|
||||
* @throws JSONException Thrown if there is an error parsing the string
|
||||
*/
|
||||
public static String toString(final Object object, final String tagName, final XMLParserConfiguration config, int indentFactor)
|
||||
throws JSONException {
|
||||
return toString(object, tagName, config, indentFactor, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a String consisting of a number of space characters specified by indent
|
||||
*
|
||||
* @param indent
|
||||
* The number of spaces to be appended to the String.
|
||||
* @return
|
||||
*/
|
||||
private static final String indent(int indent) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < indent; i++) {
|
||||
sb.append(' ');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,6 @@
|
||||
package org.json;
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json;
|
||||
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.io.Reader;
|
||||
|
||||
@@ -1,26 +1,6 @@
|
||||
package org.json;
|
||||
/*
|
||||
Copyright (c) 2002 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -1,31 +1,12 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@@ -49,7 +30,9 @@ import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONPointerException;
|
||||
import org.json.JSONString;
|
||||
import org.json.JSONTokener;
|
||||
import org.json.junit.data.MyJsonString;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.jayway.jsonpath.Configuration;
|
||||
@@ -237,6 +220,10 @@ public class JSONArrayTest {
|
||||
assertTrue(
|
||||
"The RAW Collection should give me the same as the Typed Collection",
|
||||
expected.similar(jaObj));
|
||||
Util.checkJSONArrayMaps(expected);
|
||||
Util.checkJSONArrayMaps(jaObj);
|
||||
Util.checkJSONArrayMaps(jaRaw);
|
||||
Util.checkJSONArrayMaps(jaInt);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -275,6 +262,7 @@ public class JSONArrayTest {
|
||||
myList.get(i),
|
||||
jsonArray.getString(myInts.length + i));
|
||||
}
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -308,6 +296,9 @@ public class JSONArrayTest {
|
||||
assertTrue(
|
||||
"The RAW Collection should give me the same as the Typed Collection",
|
||||
expected.similar(jaInt));
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
jaRaw, jaObj, jaInt
|
||||
)));
|
||||
}
|
||||
|
||||
|
||||
@@ -351,6 +342,9 @@ public class JSONArrayTest {
|
||||
assertTrue(
|
||||
"The RAW Collection should give me the same as the Typed Collection",
|
||||
expected.similar(jaObjObj));
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
expected, jaRaw, jaStrObj, jaStrInt, jaObjObj
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -397,6 +391,7 @@ public class JSONArrayTest {
|
||||
new Long(-1).equals(jsonArray.getLong(12)));
|
||||
|
||||
assertTrue("Array value null", jsonArray.isNull(-1));
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -412,7 +407,7 @@ public class JSONArrayTest {
|
||||
assertTrue("expected getBoolean to fail", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expected an exception message",
|
||||
"JSONArray[4] is not a boolean.",e.getMessage());
|
||||
"JSONArray[4] is not a boolean (class java.lang.String : hello).",e.getMessage());
|
||||
}
|
||||
try {
|
||||
jsonArray.get(-1);
|
||||
@@ -426,43 +421,44 @@ public class JSONArrayTest {
|
||||
assertTrue("expected getDouble to fail", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expected an exception message",
|
||||
"JSONArray[4] is not a double.",e.getMessage());
|
||||
"JSONArray[4] is not a double (class java.lang.String : hello).",e.getMessage());
|
||||
}
|
||||
try {
|
||||
jsonArray.getInt(4);
|
||||
assertTrue("expected getInt to fail", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expected an exception message",
|
||||
"JSONArray[4] is not a int.",e.getMessage());
|
||||
"JSONArray[4] is not a int (class java.lang.String : hello).",e.getMessage());
|
||||
}
|
||||
try {
|
||||
jsonArray.getJSONArray(4);
|
||||
assertTrue("expected getJSONArray to fail", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expected an exception message",
|
||||
"JSONArray[4] is not a JSONArray.",e.getMessage());
|
||||
"JSONArray[4] is not a JSONArray (class java.lang.String : hello).",e.getMessage());
|
||||
}
|
||||
try {
|
||||
jsonArray.getJSONObject(4);
|
||||
assertTrue("expected getJSONObject to fail", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expected an exception message",
|
||||
"JSONArray[4] is not a JSONObject.",e.getMessage());
|
||||
"JSONArray[4] is not a JSONObject (class java.lang.String : hello).",e.getMessage());
|
||||
}
|
||||
try {
|
||||
jsonArray.getLong(4);
|
||||
assertTrue("expected getLong to fail", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expected an exception message",
|
||||
"JSONArray[4] is not a long.",e.getMessage());
|
||||
"JSONArray[4] is not a long (class java.lang.String : hello).",e.getMessage());
|
||||
}
|
||||
try {
|
||||
jsonArray.getString(5);
|
||||
assertTrue("expected getString to fail", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expected an exception message",
|
||||
"JSONArray[5] is not a String.",e.getMessage());
|
||||
"JSONArray[5] is not a String (class java.math.BigDecimal : 0.002345).",e.getMessage());
|
||||
}
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -499,6 +495,7 @@ public class JSONArrayTest {
|
||||
assertTrue("expected value4", "value4".equals(jsonArray.query("/10/key4")));
|
||||
assertTrue("expected 0", Integer.valueOf(0).equals(jsonArray.query("/11")));
|
||||
assertTrue("expected \"-1\"", "-1".equals(jsonArray.query("/12")));
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -512,6 +509,9 @@ public class JSONArrayTest {
|
||||
assertTrue("expected JSONArray length 13. instead found "+jsonArray.length(), jsonArray.length() == 13);
|
||||
JSONArray nestedJsonArray = jsonArray.getJSONArray(9);
|
||||
assertTrue("expected JSONArray length 1", nestedJsonArray.length() == 1);
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
jsonArray, nestedJsonArray
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -587,6 +587,10 @@ public class JSONArrayTest {
|
||||
"hello".equals(jsonArray.optString(4)));
|
||||
assertTrue("Array opt string default implicit",
|
||||
"".equals(jsonArray.optString(-1)));
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
jsonArray, nestedJsonArray
|
||||
)));
|
||||
Util.checkJSONObjectMaps(nestedJsonObject);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -601,7 +605,9 @@ public class JSONArrayTest {
|
||||
assertTrue("unexpected optLong value",ja.optLong(0,0)==123);
|
||||
assertTrue("unexpected optDouble value",ja.optDouble(0,0.0)==123.0);
|
||||
assertTrue("unexpected optBigInteger value",ja.optBigInteger(0,BigInteger.ZERO).compareTo(new BigInteger("123"))==0);
|
||||
assertTrue("unexpected optBigDecimal value",ja.optBigDecimal(0,BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0); }
|
||||
assertTrue("unexpected optBigDecimal value",ja.optBigDecimal(0,BigDecimal.ZERO).compareTo(new BigDecimal("123"))==0);
|
||||
Util.checkJSONArrayMaps(ja);
|
||||
}
|
||||
|
||||
/**
|
||||
* Exercise the JSONArray.put(value) method with various parameters
|
||||
@@ -677,6 +683,8 @@ public class JSONArrayTest {
|
||||
assertTrue("expected 2 items in [9]", ((List<?>)(JsonPath.read(doc, "$[9]"))).size() == 2);
|
||||
assertTrue("expected 1", Integer.valueOf(1).equals(jsonArray.query("/9/0")));
|
||||
assertTrue("expected 2", Integer.valueOf(2).equals(jsonArray.query("/9/1")));
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
Util.checkJSONObjectMaps(jsonObject);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -756,6 +764,8 @@ public class JSONArrayTest {
|
||||
assertTrue("expected 2", Integer.valueOf(2).equals(jsonArray.query("/9/1")));
|
||||
assertTrue("expected 1 item in [10]", ((Map<?,?>)(JsonPath.read(doc, "$[10]"))).size() == 1);
|
||||
assertTrue("expected v1", "v1".equals(jsonArray.query("/10/k1")));
|
||||
Util.checkJSONObjectMaps(jsonObject);
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -772,6 +782,7 @@ public class JSONArrayTest {
|
||||
jsonArray.remove(0);
|
||||
assertTrue("array should be empty", null == jsonArray.remove(5));
|
||||
assertTrue("jsonArray should be empty", jsonArray.isEmpty());
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -811,6 +822,12 @@ public class JSONArrayTest {
|
||||
otherJsonArray.put("world");
|
||||
assertTrue("arrays values differ",
|
||||
!jsonArray.similar(otherJsonArray));
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
jsonArray, otherJsonArray
|
||||
)));
|
||||
Util.checkJSONObjectsMaps(new ArrayList<JSONObject>(Arrays.asList(
|
||||
jsonObject, otherJsonObject
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -894,6 +911,7 @@ public class JSONArrayTest {
|
||||
for (String s : jsonArray4Strs) {
|
||||
list.contains(s);
|
||||
}
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -905,6 +923,9 @@ public class JSONArrayTest {
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
assertTrue("toJSONObject should return null",
|
||||
null == jsonArray.toJSONObject(names));
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
names, jsonArray
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -926,6 +947,7 @@ public class JSONArrayTest {
|
||||
assertTrue("expected 5", Integer.valueOf(5).equals(jsonArray.query("/4")));
|
||||
assertTrue("expected 6", Integer.valueOf(6).equals(jsonArray.query("/5")));
|
||||
assertTrue("expected 7", Integer.valueOf(7).equals(jsonArray.query("/6")));
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -968,6 +990,10 @@ public class JSONArrayTest {
|
||||
assertTrue("Array value string long",
|
||||
new Long(-1).equals(Long.parseLong((String) it.next())));
|
||||
assertTrue("should be at end of array", !it.hasNext());
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
jsonArray, nestedJsonArray
|
||||
)));
|
||||
Util.checkJSONObjectMaps(nestedJsonObject);
|
||||
}
|
||||
|
||||
@Test(expected = JSONPointerException.class)
|
||||
@@ -1010,6 +1036,7 @@ public class JSONArrayTest {
|
||||
} finally {
|
||||
stringWriter.close();
|
||||
}
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1069,9 +1096,11 @@ public class JSONArrayTest {
|
||||
&& actualStr.contains("\"key2\": false")
|
||||
&& actualStr.contains("\"key3\": 3.14")
|
||||
);
|
||||
Util.checkJSONArrayMaps(finalArray);
|
||||
} finally {
|
||||
stringWriter.close();
|
||||
}
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1182,6 +1211,7 @@ public class JSONArrayTest {
|
||||
// assert that the new list is mutable
|
||||
assertTrue("Removing an entry should succeed", list.remove(2) != null);
|
||||
assertTrue("List should have 2 elements", list.size() == 2);
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1194,7 +1224,7 @@ public class JSONArrayTest {
|
||||
assertNotNull(new JSONArray(5));
|
||||
// Check Size -> Even though the capacity of the JSONArray can be specified using a positive
|
||||
// integer but the length of JSONArray always reflects upon the items added into it.
|
||||
assertEquals(0l, new JSONArray(10).length());
|
||||
// assertEquals(0l, new JSONArray(10).length());
|
||||
try {
|
||||
assertNotNull("Should throw an exception", new JSONArray(-1));
|
||||
} catch (JSONException e) {
|
||||
@@ -1223,8 +1253,8 @@ public class JSONArrayTest {
|
||||
((Collection<Object>)o).add("test");
|
||||
((Collection<Object>)o).add(false);
|
||||
try {
|
||||
a = new JSONArray(o);
|
||||
assertNull("Should error", a);
|
||||
JSONArray a0 = new JSONArray(o);
|
||||
assertNull("Should error", a0);
|
||||
} catch (JSONException ex) {
|
||||
}
|
||||
|
||||
@@ -1232,10 +1262,11 @@ public class JSONArrayTest {
|
||||
// this is required for backwards compatibility
|
||||
o = a;
|
||||
try {
|
||||
a = new JSONArray(o);
|
||||
assertNull("Should error", a);
|
||||
JSONArray a1 = new JSONArray(o);
|
||||
assertNull("Should error", a1);
|
||||
} catch (JSONException ex) {
|
||||
}
|
||||
Util.checkJSONArrayMaps(a);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1252,6 +1283,9 @@ public class JSONArrayTest {
|
||||
for(int i = 0; i < a1.length(); i++) {
|
||||
assertEquals("index " + i + " are equal", a1.get(i), a2.get(i));
|
||||
}
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
a1, a2
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1269,6 +1303,9 @@ public class JSONArrayTest {
|
||||
for(int i = 0; i < a1.length(); i++) {
|
||||
assertEquals("index " + i + " are equal", a1.get(i), a2.get(i));
|
||||
}
|
||||
Util.checkJSONArraysMaps(new ArrayList<JSONArray>(Arrays.asList(
|
||||
a1, a2
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1284,6 +1321,7 @@ public class JSONArrayTest {
|
||||
jsonArray.clear(); //Clears the JSONArray
|
||||
assertTrue("expected jsonArray.length() == 0", jsonArray.length() == 0); //Check if its length is 0
|
||||
jsonArray.getInt(0); //Should throws org.json.JSONException: JSONArray[0] not found
|
||||
Util.checkJSONArrayMaps(jsonArray);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1297,5 +1335,27 @@ public class JSONArrayTest {
|
||||
JSONArray json_input = new JSONArray(tokener);
|
||||
assertNotNull(json_input);
|
||||
fail("Excepected Exception.");
|
||||
Util.checkJSONArrayMaps(json_input);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIssue682SimilarityOfJSONString() {
|
||||
JSONArray ja1 = new JSONArray()
|
||||
.put(new MyJsonString())
|
||||
.put(2);
|
||||
JSONArray ja2 = new JSONArray()
|
||||
.put(new MyJsonString())
|
||||
.put(2);
|
||||
assertTrue(ja1.similar(ja2));
|
||||
|
||||
JSONArray ja3 = new JSONArray()
|
||||
.put(new JSONString() {
|
||||
@Override
|
||||
public String toJSONString() {
|
||||
return "\"different value\"";
|
||||
}
|
||||
})
|
||||
.put(2);
|
||||
assertFalse(ja1.similar(ja3));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
@@ -158,7 +138,7 @@ public class JSONMLTest {
|
||||
assertTrue("Expecting an exception", false);
|
||||
} catch (JSONException e) {
|
||||
assertEquals("Expecting an exception message",
|
||||
"JSONArray[0] is not a String.",
|
||||
"JSONArray[0] is not a String (class org.json.JSONArray).",
|
||||
e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
126
src/test/java/org/json/junit/JSONObjectNumberTest.java
Normal file
126
src/test/java/org/json/junit/JSONObjectNumberTest.java
Normal file
@@ -0,0 +1,126 @@
|
||||
package org.json.junit;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.junit.runners.Parameterized.Parameters;
|
||||
|
||||
@RunWith(value = Parameterized.class)
|
||||
public class JSONObjectNumberTest {
|
||||
private final String objectString;
|
||||
private Integer value = 50;
|
||||
|
||||
@Parameters(name = "{index}: {0}")
|
||||
public static Collection<Object[]> data() {
|
||||
return Arrays.asList(new Object[][]{
|
||||
{"{value:50}", 1},
|
||||
{"{value:50.0}", 1},
|
||||
{"{value:5e1}", 1},
|
||||
{"{value:5E1}", 1},
|
||||
{"{value:5e1}", 1},
|
||||
{"{value:'50'}", 1},
|
||||
{"{value:-50}", -1},
|
||||
{"{value:-50.0}", -1},
|
||||
{"{value:-5e1}", -1},
|
||||
{"{value:-5E1}", -1},
|
||||
{"{value:-5e1}", -1},
|
||||
{"{value:'-50'}", -1}
|
||||
// JSON does not support octal or hex numbers;
|
||||
// see https://stackoverflow.com/a/52671839/6323312
|
||||
// "{value:062}", // octal 50
|
||||
// "{value:0x32}" // hex 50
|
||||
});
|
||||
}
|
||||
|
||||
public JSONObjectNumberTest(String objectString, int resultIsNegative) {
|
||||
this.objectString = objectString;
|
||||
this.value *= resultIsNegative;
|
||||
}
|
||||
|
||||
private JSONObject object;
|
||||
|
||||
@Before
|
||||
public void setJsonObject() {
|
||||
object = new JSONObject(objectString);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetNumber() {
|
||||
assertEquals(value.intValue(), object.getNumber("value").intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBigDecimal() {
|
||||
assertTrue(BigDecimal.valueOf(value).compareTo(object.getBigDecimal("value")) == 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBigInteger() {
|
||||
assertEquals(BigInteger.valueOf(value), object.getBigInteger("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetFloat() {
|
||||
assertEquals(value.floatValue(), object.getFloat("value"), 0.0f);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetDouble() {
|
||||
assertEquals(value.doubleValue(), object.getDouble("value"), 0.0d);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetInt() {
|
||||
assertEquals(value.intValue(), object.getInt("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetLong() {
|
||||
assertEquals(value.longValue(), object.getLong("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptNumber() {
|
||||
assertEquals(value.intValue(), object.optNumber("value").intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptBigDecimal() {
|
||||
assertTrue(BigDecimal.valueOf(value).compareTo(object.optBigDecimal("value", null)) == 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptBigInteger() {
|
||||
assertEquals(BigInteger.valueOf(value), object.optBigInteger("value", null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptFloat() {
|
||||
assertEquals(value.floatValue(), object.optFloat("value"), 0.0f);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptDouble() {
|
||||
assertEquals(value.doubleValue(), object.optDouble("value"), 0.0d);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptInt() {
|
||||
assertEquals(value.intValue(), object.optInt("value"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOptLong() {
|
||||
assertEquals(value.longValue(), object.optLong("value"));
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -92,8 +72,10 @@ public class JSONPointerTest {
|
||||
|
||||
@Test
|
||||
public void queryByEmptyKeySubObject() {
|
||||
assertEquals( "{\"\":\"empty key of an object with an empty key\",\"subKey\":\"Some" +
|
||||
" other value\"}", query("/obj/").toString());
|
||||
JSONObject json = new JSONObject("{\"\":\"empty key of an object with an empty key\",\"subKey\":\"Some" +
|
||||
" other value\"}");
|
||||
JSONObject obj = (JSONObject) query("/obj/");
|
||||
assertTrue(json.similar(obj));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
@@ -78,7 +58,6 @@ public class Util {
|
||||
* or something else.
|
||||
* @param value created by the code to be tested
|
||||
* @param expectedValue created specifically for comparing
|
||||
* @param key key to the jsonObject entry to be compared
|
||||
*/
|
||||
private static void compareActualVsExpectedObjects(Object value,
|
||||
Object expectedValue) {
|
||||
@@ -117,4 +96,106 @@ public class Util {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that all JSONObject maps are the same as the default ctor
|
||||
* @param jsonObjects list of objects to be tested
|
||||
*/
|
||||
public static void checkJSONObjectsMaps(List<JSONObject> jsonObjects) {
|
||||
if (jsonObjects == null || jsonObjects.size() == 0) {
|
||||
return;
|
||||
}
|
||||
Class<? extends Map> mapType = new JSONObject().getMapType();
|
||||
for (JSONObject jsonObject : jsonObjects) {
|
||||
if (jsonObject != null) {
|
||||
assertTrue(mapType == jsonObject.getMapType());
|
||||
checkJSONObjectMaps(jsonObject, mapType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that all JSONObject maps are the same as the default ctor
|
||||
* @param jsonObject the object to be tested
|
||||
*/
|
||||
public static void checkJSONObjectMaps(JSONObject jsonObject) {
|
||||
if (jsonObject != null) {
|
||||
checkJSONObjectMaps(jsonObject, jsonObject.getMapType());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that all JSONObject maps are the same as mapType
|
||||
* @param jsonObject object to be tested
|
||||
* @param mapType mapType to test against
|
||||
*/
|
||||
public static void checkJSONObjectMaps(JSONObject jsonObject, Class<? extends Map> mapType) {
|
||||
if (mapType == null) {
|
||||
mapType = new JSONObject().getMapType();
|
||||
}
|
||||
Set<String> keys = jsonObject.keySet();
|
||||
for (String key : keys) {
|
||||
Object val = jsonObject.get(key);
|
||||
if (val instanceof JSONObject) {
|
||||
JSONObject jsonObjectVal = (JSONObject) val;
|
||||
assertTrue(mapType == ((JSONObject) val).getMapType());
|
||||
checkJSONObjectMaps(jsonObjectVal, mapType);
|
||||
} else if (val instanceof JSONArray) {
|
||||
JSONArray jsonArrayVal = (JSONArray)val;
|
||||
checkJSONArrayMaps(jsonArrayVal, mapType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that all JSONObject maps in the JSONArray object match the default map
|
||||
* @param jsonArrays list of JSONArray objects to be tested
|
||||
*/
|
||||
public static void checkJSONArraysMaps(List<JSONArray> jsonArrays) {
|
||||
if (jsonArrays == null || jsonArrays.size() == 0) {
|
||||
return;
|
||||
}
|
||||
Class<? extends Map> mapType = new JSONObject().getMapType();
|
||||
for (JSONArray jsonArray : jsonArrays) {
|
||||
if (jsonArray != null) {
|
||||
checkJSONArrayMaps(jsonArray, mapType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that all JSONObject maps in the JSONArray object match mapType
|
||||
* @param jsonArray object to be tested
|
||||
* @param mapType map type to be tested against
|
||||
*/
|
||||
public static void checkJSONArrayMaps(JSONArray jsonArray, Class<? extends Map> mapType) {
|
||||
if (jsonArray == null) {
|
||||
return;
|
||||
}
|
||||
if (mapType == null) {
|
||||
mapType = new JSONObject().getMapType();
|
||||
}
|
||||
Iterator<Object> it = jsonArray.iterator();
|
||||
while (it.hasNext()) {
|
||||
Object val = it.next();
|
||||
if (val instanceof JSONObject) {
|
||||
JSONObject jsonObjectVal = (JSONObject)val;
|
||||
checkJSONObjectMaps(jsonObjectVal, mapType);
|
||||
} else if (val instanceof JSONArray) {
|
||||
JSONArray jsonArrayVal = (JSONArray)val;
|
||||
checkJSONArrayMaps(jsonArrayVal, mapType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that all JSONObject maps nested in the JSONArray match
|
||||
* the default mapType
|
||||
* @param jsonArray the object to be tested
|
||||
*/
|
||||
public static void checkJSONArrayMaps(JSONArray jsonArray) {
|
||||
if (jsonArray != null) {
|
||||
checkJSONArrayMaps(jsonArray, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
package org.json.junit;
|
||||
|
||||
/*
|
||||
Copyright (c) 2020 JSON.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The Software shall be used for Good, not Evil.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
Public Domain.
|
||||
*/
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -41,13 +21,7 @@ import java.io.StringReader;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONTokener;
|
||||
import org.json.XML;
|
||||
import org.json.XMLParserConfiguration;
|
||||
import org.json.XMLXsiTypeConverter;
|
||||
import org.json.*;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
@@ -1069,4 +1043,211 @@ public class XMLTest {
|
||||
fail("Expected to be unable to modify the config");
|
||||
} catch (Exception ignored) { }
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIndentComplicatedJsonObject(){
|
||||
String str = "{\n" +
|
||||
" \"success\": true,\n" +
|
||||
" \"error\": null,\n" +
|
||||
" \"response\": [\n" +
|
||||
" {\n" +
|
||||
" \"timestamp\": 1664917200,\n" +
|
||||
" \"dateTimeISO\": \"2022-10-05T00:00:00+03:00\",\n" +
|
||||
" \"loc\": {\n" +
|
||||
" \"lat\": 39.91987,\n" +
|
||||
" \"long\": 32.85427\n" +
|
||||
" },\n" +
|
||||
" \"place\": {\n" +
|
||||
" \"name\": \"ankara\",\n" +
|
||||
" \"state\": \"an\",\n" +
|
||||
" \"country\": \"tr\"\n" +
|
||||
" },\n" +
|
||||
" \"profile\": {\n" +
|
||||
" \"tz\": \"Europe/Istanbul\"\n" +
|
||||
" },\n" +
|
||||
" \"sun\": {\n" +
|
||||
" \"rise\": 1664941721,\n" +
|
||||
" \"riseISO\": \"2022-10-05T06:48:41+03:00\",\n" +
|
||||
" \"set\": 1664983521,\n" +
|
||||
" \"setISO\": \"2022-10-05T18:25:21+03:00\",\n" +
|
||||
" \"transit\": 1664962621,\n" +
|
||||
" \"transitISO\": \"2022-10-05T12:37:01+03:00\",\n" +
|
||||
" \"midnightSun\": false,\n" +
|
||||
" \"polarNight\": false,\n" +
|
||||
" \"twilight\": {\n" +
|
||||
" \"civilBegin\": 1664940106,\n" +
|
||||
" \"civilBeginISO\": \"2022-10-05T06:21:46+03:00\",\n" +
|
||||
" \"civilEnd\": 1664985136,\n" +
|
||||
" \"civilEndISO\": \"2022-10-05T18:52:16+03:00\",\n" +
|
||||
" \"nauticalBegin\": 1664938227,\n" +
|
||||
" \"nauticalBeginISO\": \"2022-10-05T05:50:27+03:00\",\n" +
|
||||
" \"nauticalEnd\": 1664987015,\n" +
|
||||
" \"nauticalEndISO\": \"2022-10-05T19:23:35+03:00\",\n" +
|
||||
" \"astronomicalBegin\": 1664936337,\n" +
|
||||
" \"astronomicalBeginISO\": \"2022-10-05T05:18:57+03:00\",\n" +
|
||||
" \"astronomicalEnd\": 1664988905,\n" +
|
||||
" \"astronomicalEndISO\": \"2022-10-05T19:55:05+03:00\"\n" +
|
||||
" }\n" +
|
||||
" },\n" +
|
||||
" \"moon\": {\n" +
|
||||
" \"rise\": 1664976480,\n" +
|
||||
" \"riseISO\": \"2022-10-05T16:28:00+03:00\",\n" +
|
||||
" \"set\": 1664921520,\n" +
|
||||
" \"setISO\": \"2022-10-05T01:12:00+03:00\",\n" +
|
||||
" \"transit\": 1664994240,\n" +
|
||||
" \"transitISO\": \"2022-10-05T21:24:00+03:00\",\n" +
|
||||
" \"underfoot\": 1664949360,\n" +
|
||||
" \"underfootISO\": \"2022-10-05T08:56:00+03:00\",\n" +
|
||||
" \"phase\": {\n" +
|
||||
" \"phase\": 0.3186,\n" +
|
||||
" \"name\": \"waxing gibbous\",\n" +
|
||||
" \"illum\": 71,\n" +
|
||||
" \"age\": 9.41,\n" +
|
||||
" \"angle\": 0.55\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" ]\n" +
|
||||
"}" ;
|
||||
JSONObject jsonObject = new JSONObject(str);
|
||||
String actualIndentedXmlString = XML.toString(jsonObject, 1);
|
||||
String expected = "<success>true</success>\n" +
|
||||
"<response>\n" +
|
||||
" <dateTimeISO>2022-10-05T00:00:00+03:00</dateTimeISO>\n" +
|
||||
" <loc>\n" +
|
||||
" <lat>39.91987</lat>\n" +
|
||||
" <long>32.85427</long>\n" +
|
||||
" </loc>\n" +
|
||||
" <moon>\n" +
|
||||
" <phase>\n" +
|
||||
" <phase>0.3186</phase>\n" +
|
||||
" <name>waxing gibbous</name>\n" +
|
||||
" <angle>0.55</angle>\n" +
|
||||
" <illum>71</illum>\n" +
|
||||
" <age>9.41</age>\n" +
|
||||
" </phase>\n" +
|
||||
" <setISO>2022-10-05T01:12:00+03:00</setISO>\n" +
|
||||
" <underfoot>1664949360</underfoot>\n" +
|
||||
" <set>1664921520</set>\n" +
|
||||
" <transit>1664994240</transit>\n" +
|
||||
" <transitISO>2022-10-05T21:24:00+03:00</transitISO>\n" +
|
||||
" <riseISO>2022-10-05T16:28:00+03:00</riseISO>\n" +
|
||||
" <rise>1664976480</rise>\n" +
|
||||
" <underfootISO>2022-10-05T08:56:00+03:00</underfootISO>\n" +
|
||||
" </moon>\n" +
|
||||
" <profile>\n" +
|
||||
" <tz>Europe/Istanbul</tz>\n" +
|
||||
" </profile>\n" +
|
||||
" <place>\n" +
|
||||
" <country>tr</country>\n" +
|
||||
" <name>ankara</name>\n" +
|
||||
" <state>an</state>\n" +
|
||||
" </place>\n" +
|
||||
" <sun>\n" +
|
||||
" <setISO>2022-10-05T18:25:21+03:00</setISO>\n" +
|
||||
" <midnightSun>false</midnightSun>\n" +
|
||||
" <set>1664983521</set>\n" +
|
||||
" <transit>1664962621</transit>\n" +
|
||||
" <polarNight>false</polarNight>\n" +
|
||||
" <transitISO>2022-10-05T12:37:01+03:00</transitISO>\n" +
|
||||
" <riseISO>2022-10-05T06:48:41+03:00</riseISO>\n" +
|
||||
" <rise>1664941721</rise>\n" +
|
||||
" <twilight>\n" +
|
||||
" <civilEnd>1664985136</civilEnd>\n" +
|
||||
" <astronomicalBegin>1664936337</astronomicalBegin>\n" +
|
||||
" <astronomicalEnd>1664988905</astronomicalEnd>\n" +
|
||||
" <astronomicalBeginISO>2022-10-05T05:18:57+03:00</astronomicalBeginISO>\n" +
|
||||
" <civilBegin>1664940106</civilBegin>\n" +
|
||||
" <nauticalEndISO>2022-10-05T19:23:35+03:00</nauticalEndISO>\n" +
|
||||
" <astronomicalEndISO>2022-10-05T19:55:05+03:00</astronomicalEndISO>\n" +
|
||||
" <nauticalBegin>1664938227</nauticalBegin>\n" +
|
||||
" <nauticalEnd>1664987015</nauticalEnd>\n" +
|
||||
" <nauticalBeginISO>2022-10-05T05:50:27+03:00</nauticalBeginISO>\n" +
|
||||
" <civilBeginISO>2022-10-05T06:21:46+03:00</civilBeginISO>\n" +
|
||||
" <civilEndISO>2022-10-05T18:52:16+03:00</civilEndISO>\n" +
|
||||
" </twilight>\n" +
|
||||
" </sun>\n" +
|
||||
" <timestamp>1664917200</timestamp>\n" +
|
||||
"</response>\n" +
|
||||
"<error>null</error>\n";
|
||||
assertEquals(actualIndentedXmlString, expected);
|
||||
|
||||
|
||||
}
|
||||
@Test
|
||||
public void testIndentSimpleJsonObject(){
|
||||
String str = "{ \"employee\": { \n" +
|
||||
" \"name\": \"sonoo\", \n" +
|
||||
" \"salary\": 56000, \n" +
|
||||
" \"married\": true \n" +
|
||||
" }}";
|
||||
JSONObject jsonObject = new JSONObject(str);
|
||||
String actual = XML.toString(jsonObject, "Test", 2);
|
||||
String expected = "<Test>\n" +
|
||||
" <employee>\n" +
|
||||
" <name>sonoo</name>\n" +
|
||||
" <salary>56000</salary>\n" +
|
||||
" <married>true</married>\n" +
|
||||
" </employee>\n" +
|
||||
"</Test>\n";
|
||||
assertEquals(actual, expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIndentSimpleJsonArray(){
|
||||
String str = "[ \n" +
|
||||
" {\"name\":\"Ram\", \"email\":\"Ram@gmail.com\"}, \n" +
|
||||
" {\"name\":\"Bob\", \"email\":\"bob32@gmail.com\"} \n" +
|
||||
"] ";
|
||||
JSONArray jsonObject = new JSONArray(str);
|
||||
String actual = XML.toString(jsonObject, 2);
|
||||
String expected = "<array>\n" +
|
||||
" <name>Ram</name>\n" +
|
||||
" <email>Ram@gmail.com</email>\n" +
|
||||
"</array>\n" +
|
||||
"<array>\n" +
|
||||
" <name>Bob</name>\n" +
|
||||
" <email>bob32@gmail.com</email>\n" +
|
||||
"</array>\n";
|
||||
assertEquals(actual, expected);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIndentComplicatedJsonObjectWithArrayAndWithConfig(){
|
||||
try {
|
||||
InputStream jsonStream = null;
|
||||
try {
|
||||
jsonStream = XMLTest.class.getClassLoader().getResourceAsStream("Issue593.json");
|
||||
final JSONObject object = new JSONObject(new JSONTokener(jsonStream));
|
||||
String actualString = XML.toString(object, null, XMLParserConfiguration.KEEP_STRINGS,2);
|
||||
InputStream xmlStream = null;
|
||||
try {
|
||||
xmlStream = XMLTest.class.getClassLoader().getResourceAsStream("Issue593.xml");
|
||||
int bufferSize = 1024;
|
||||
char[] buffer = new char[bufferSize];
|
||||
StringBuilder expected = new StringBuilder();
|
||||
Reader in = new InputStreamReader(xmlStream, "UTF-8");
|
||||
for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) {
|
||||
expected.append(buffer, 0, numRead);
|
||||
}
|
||||
assertEquals(expected.toString(), actualString.replaceAll("\\n|\\r\\n", System.getProperty("line.separator")));
|
||||
} finally {
|
||||
if (xmlStream != null) {
|
||||
xmlStream.close();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (jsonStream != null) {
|
||||
jsonStream.close();
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
fail("file writer error: " +e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
704
src/test/resources/Issue593.json
Normal file
704
src/test/resources/Issue593.json
Normal file
@@ -0,0 +1,704 @@
|
||||
{
|
||||
"success": true,
|
||||
"error": null,
|
||||
"response": [
|
||||
{
|
||||
"loc": {
|
||||
"long": 31.25,
|
||||
"lat": 30.063
|
||||
},
|
||||
"interval": "day",
|
||||
"place": {
|
||||
"name": "cairo",
|
||||
"state": "qh",
|
||||
"country": "eg"
|
||||
},
|
||||
"periods": [
|
||||
{
|
||||
"timestamp": 1665032400,
|
||||
"validTime": "2022-10-06T07:00:00+02:00",
|
||||
"dateTimeISO": "2022-10-06T07:00:00+02:00",
|
||||
"maxTempC": 32,
|
||||
"maxTempF": 90,
|
||||
"minTempC": 19,
|
||||
"minTempF": 66,
|
||||
"avgTempC": 25,
|
||||
"avgTempF": 78,
|
||||
"tempC": null,
|
||||
"tempF": null,
|
||||
"maxFeelslikeC": 32,
|
||||
"maxFeelslikeF": 89,
|
||||
"minFeelslikeC": 21,
|
||||
"minFeelslikeF": 70,
|
||||
"avgFeelslikeC": 26,
|
||||
"avgFeelslikeF": 80,
|
||||
"feelslikeC": 21,
|
||||
"feelslikeF": 70,
|
||||
"maxDewpointC": 17,
|
||||
"maxDewpointF": 63,
|
||||
"minDewpointC": 11,
|
||||
"minDewpointF": 52,
|
||||
"avgDewpointC": 14,
|
||||
"avgDewpointF": 58,
|
||||
"dewpointC": 17,
|
||||
"dewpointF": 63,
|
||||
"maxHumidity": 77,
|
||||
"minHumidity": 29,
|
||||
"humidity": 77,
|
||||
"pop": 0,
|
||||
"precipMM": 0,
|
||||
"precipIN": 0,
|
||||
"iceaccum": null,
|
||||
"iceaccumMM": null,
|
||||
"iceaccumIN": null,
|
||||
"snowCM": 0,
|
||||
"snowIN": 0,
|
||||
"pressureMB": 1015,
|
||||
"pressureIN": 29.97,
|
||||
"windDir": "N",
|
||||
"windDirDEG": 353,
|
||||
"windSpeedKTS": 5,
|
||||
"windSpeedKPH": 9,
|
||||
"windSpeedMPH": 6,
|
||||
"windGustKTS": 21,
|
||||
"windGustKPH": 40,
|
||||
"windGustMPH": 25,
|
||||
"windDirMax": "NNW",
|
||||
"windDirMaxDEG": 342,
|
||||
"windSpeedMaxKTS": 9,
|
||||
"windSpeedMaxKPH": 16,
|
||||
"windSpeedMaxMPH": 10,
|
||||
"windDirMin": "N",
|
||||
"windDirMinDEG": 353,
|
||||
"windSpeedMinKTS": 1,
|
||||
"windSpeedMinKPH": 2,
|
||||
"windSpeedMinMPH": 1,
|
||||
"windDir80m": "N",
|
||||
"windDir80mDEG": 11,
|
||||
"windSpeed80mKTS": 12,
|
||||
"windSpeed80mKPH": 22,
|
||||
"windSpeed80mMPH": 13,
|
||||
"windGust80mKTS": 22,
|
||||
"windGust80mKPH": 41,
|
||||
"windGust80mMPH": 25,
|
||||
"windDirMax80m": "NNW",
|
||||
"windDirMax80mDEG": 343,
|
||||
"windSpeedMax80mKTS": 22,
|
||||
"windSpeedMax80mKPH": 41,
|
||||
"windSpeedMax80mMPH": 25,
|
||||
"windDirMin80m": "E",
|
||||
"windDirMin80mDEG": 95,
|
||||
"windSpeedMin80mKTS": 8,
|
||||
"windSpeedMin80mKPH": 15,
|
||||
"windSpeedMin80mMPH": 10,
|
||||
"sky": 22,
|
||||
"cloudsCoded": "FW",
|
||||
"weather": "Mostly Sunny",
|
||||
"weatherCoded": [],
|
||||
"weatherPrimary": "Mostly Sunny",
|
||||
"weatherPrimaryCoded": "::FW",
|
||||
"icon": "fair.png",
|
||||
"visibilityKM": 24.135,
|
||||
"visibilityMI": 15,
|
||||
"uvi": 6,
|
||||
"solradWM2": 5608,
|
||||
"solradMinWM2": 0,
|
||||
"solradMaxWM2": 778,
|
||||
"isDay": true,
|
||||
"maxCoverage": "",
|
||||
"sunrise": 1665028274,
|
||||
"sunset": 1665070502,
|
||||
"sunriseISO": "2022-10-06T05:51:14+02:00",
|
||||
"sunsetISO": "2022-10-06T17:35:02+02:00"
|
||||
},
|
||||
{
|
||||
"timestamp": 1665118800,
|
||||
"validTime": "2022-10-07T07:00:00+02:00",
|
||||
"dateTimeISO": "2022-10-07T07:00:00+02:00",
|
||||
"maxTempC": 30,
|
||||
"maxTempF": 86,
|
||||
"minTempC": 19,
|
||||
"minTempF": 66,
|
||||
"avgTempC": 24,
|
||||
"avgTempF": 76,
|
||||
"tempC": null,
|
||||
"tempF": null,
|
||||
"maxFeelslikeC": 29,
|
||||
"maxFeelslikeF": 85,
|
||||
"minFeelslikeC": 19,
|
||||
"minFeelslikeF": 67,
|
||||
"avgFeelslikeC": 24,
|
||||
"avgFeelslikeF": 76,
|
||||
"feelslikeC": 19,
|
||||
"feelslikeF": 67,
|
||||
"maxDewpointC": 15,
|
||||
"maxDewpointF": 60,
|
||||
"minDewpointC": 10,
|
||||
"minDewpointF": 50,
|
||||
"avgDewpointC": 12,
|
||||
"avgDewpointF": 54,
|
||||
"dewpointC": 15,
|
||||
"dewpointF": 60,
|
||||
"maxHumidity": 77,
|
||||
"minHumidity": 30,
|
||||
"humidity": 77,
|
||||
"pop": 0,
|
||||
"precipMM": 0,
|
||||
"precipIN": 0,
|
||||
"iceaccum": null,
|
||||
"iceaccumMM": null,
|
||||
"iceaccumIN": null,
|
||||
"snowCM": 0,
|
||||
"snowIN": 0,
|
||||
"pressureMB": 1014,
|
||||
"pressureIN": 29.95,
|
||||
"windDir": "NW",
|
||||
"windDirDEG": 325,
|
||||
"windSpeedKTS": 1,
|
||||
"windSpeedKPH": 2,
|
||||
"windSpeedMPH": 1,
|
||||
"windGustKTS": 16,
|
||||
"windGustKPH": 29,
|
||||
"windGustMPH": 18,
|
||||
"windDirMax": "WNW",
|
||||
"windDirMaxDEG": 298,
|
||||
"windSpeedMaxKTS": 7,
|
||||
"windSpeedMaxKPH": 13,
|
||||
"windSpeedMaxMPH": 8,
|
||||
"windDirMin": "NW",
|
||||
"windDirMinDEG": 325,
|
||||
"windSpeedMinKTS": 1,
|
||||
"windSpeedMinKPH": 2,
|
||||
"windSpeedMinMPH": 1,
|
||||
"windDir80m": "NNW",
|
||||
"windDir80mDEG": 347,
|
||||
"windSpeed80mKTS": 6,
|
||||
"windSpeed80mKPH": 10,
|
||||
"windSpeed80mMPH": 6,
|
||||
"windGust80mKTS": 20,
|
||||
"windGust80mKPH": 37,
|
||||
"windGust80mMPH": 23,
|
||||
"windDirMax80m": "NW",
|
||||
"windDirMax80mDEG": 316,
|
||||
"windSpeedMax80mKTS": 20,
|
||||
"windSpeedMax80mKPH": 37,
|
||||
"windSpeedMax80mMPH": 23,
|
||||
"windDirMin80m": "NNW",
|
||||
"windDirMin80mDEG": 347,
|
||||
"windSpeedMin80mKTS": 6,
|
||||
"windSpeedMin80mKPH": 10,
|
||||
"windSpeedMin80mMPH": 6,
|
||||
"sky": 30,
|
||||
"cloudsCoded": "FW",
|
||||
"weather": "Mostly Sunny",
|
||||
"weatherCoded": [],
|
||||
"weatherPrimary": "Mostly Sunny",
|
||||
"weatherPrimaryCoded": "::FW",
|
||||
"icon": "fair.png",
|
||||
"visibilityKM": 24.135,
|
||||
"visibilityMI": 15,
|
||||
"uvi": 6,
|
||||
"solradWM2": 5486,
|
||||
"solradMinWM2": 0,
|
||||
"solradMaxWM2": 742,
|
||||
"isDay": true,
|
||||
"maxCoverage": "",
|
||||
"sunrise": 1665114710,
|
||||
"sunset": 1665156831,
|
||||
"sunriseISO": "2022-10-07T05:51:50+02:00",
|
||||
"sunsetISO": "2022-10-07T17:33:51+02:00"
|
||||
},
|
||||
{
|
||||
"timestamp": 1665205200,
|
||||
"validTime": "2022-10-08T07:00:00+02:00",
|
||||
"dateTimeISO": "2022-10-08T07:00:00+02:00",
|
||||
"maxTempC": 30,
|
||||
"maxTempF": 87,
|
||||
"minTempC": 19,
|
||||
"minTempF": 66,
|
||||
"avgTempC": 25,
|
||||
"avgTempF": 76,
|
||||
"tempC": null,
|
||||
"tempF": null,
|
||||
"maxFeelslikeC": 30,
|
||||
"maxFeelslikeF": 86,
|
||||
"minFeelslikeC": 19,
|
||||
"minFeelslikeF": 67,
|
||||
"avgFeelslikeC": 25,
|
||||
"avgFeelslikeF": 76,
|
||||
"feelslikeC": 19,
|
||||
"feelslikeF": 67,
|
||||
"maxDewpointC": 15,
|
||||
"maxDewpointF": 59,
|
||||
"minDewpointC": 11,
|
||||
"minDewpointF": 52,
|
||||
"avgDewpointC": 13,
|
||||
"avgDewpointF": 56,
|
||||
"dewpointC": 15,
|
||||
"dewpointF": 59,
|
||||
"maxHumidity": 76,
|
||||
"minHumidity": 32,
|
||||
"humidity": 76,
|
||||
"pop": 0,
|
||||
"precipMM": 0,
|
||||
"precipIN": 0,
|
||||
"iceaccum": null,
|
||||
"iceaccumMM": null,
|
||||
"iceaccumIN": null,
|
||||
"snowCM": 0,
|
||||
"snowIN": 0,
|
||||
"pressureMB": 1014,
|
||||
"pressureIN": 29.94,
|
||||
"windDir": "NNE",
|
||||
"windDirDEG": 21,
|
||||
"windSpeedKTS": 1,
|
||||
"windSpeedKPH": 2,
|
||||
"windSpeedMPH": 1,
|
||||
"windGustKTS": 17,
|
||||
"windGustKPH": 32,
|
||||
"windGustMPH": 20,
|
||||
"windDirMax": "WNW",
|
||||
"windDirMaxDEG": 301,
|
||||
"windSpeedMaxKTS": 7,
|
||||
"windSpeedMaxKPH": 13,
|
||||
"windSpeedMaxMPH": 8,
|
||||
"windDirMin": "NNE",
|
||||
"windDirMinDEG": 21,
|
||||
"windSpeedMinKTS": 1,
|
||||
"windSpeedMinKPH": 2,
|
||||
"windSpeedMinMPH": 1,
|
||||
"windDir80m": "NW",
|
||||
"windDir80mDEG": 309,
|
||||
"windSpeed80mKTS": 5,
|
||||
"windSpeed80mKPH": 9,
|
||||
"windSpeed80mMPH": 5,
|
||||
"windGust80mKTS": 17,
|
||||
"windGust80mKPH": 31,
|
||||
"windGust80mMPH": 19,
|
||||
"windDirMax80m": "NW",
|
||||
"windDirMax80mDEG": 322,
|
||||
"windSpeedMax80mKTS": 17,
|
||||
"windSpeedMax80mKPH": 31,
|
||||
"windSpeedMax80mMPH": 19,
|
||||
"windDirMin80m": "NW",
|
||||
"windDirMin80mDEG": 309,
|
||||
"windSpeedMin80mKTS": 5,
|
||||
"windSpeedMin80mKPH": 9,
|
||||
"windSpeedMin80mMPH": 5,
|
||||
"sky": 47,
|
||||
"cloudsCoded": "SC",
|
||||
"weather": "Partly Cloudy",
|
||||
"weatherCoded": [],
|
||||
"weatherPrimary": "Partly Cloudy",
|
||||
"weatherPrimaryCoded": "::SC",
|
||||
"icon": "pcloudy.png",
|
||||
"visibilityKM": 24.135,
|
||||
"visibilityMI": 15,
|
||||
"uvi": 7,
|
||||
"solradWM2": 4785,
|
||||
"solradMinWM2": 0,
|
||||
"solradMaxWM2": 682,
|
||||
"isDay": true,
|
||||
"maxCoverage": "",
|
||||
"sunrise": 1665201146,
|
||||
"sunset": 1665243161,
|
||||
"sunriseISO": "2022-10-08T05:52:26+02:00",
|
||||
"sunsetISO": "2022-10-08T17:32:41+02:00"
|
||||
},
|
||||
{
|
||||
"timestamp": 1665291600,
|
||||
"validTime": "2022-10-09T07:00:00+02:00",
|
||||
"dateTimeISO": "2022-10-09T07:00:00+02:00",
|
||||
"maxTempC": 31,
|
||||
"maxTempF": 87,
|
||||
"minTempC": 19,
|
||||
"minTempF": 67,
|
||||
"avgTempC": 25,
|
||||
"avgTempF": 77,
|
||||
"tempC": null,
|
||||
"tempF": null,
|
||||
"maxFeelslikeC": 30,
|
||||
"maxFeelslikeF": 86,
|
||||
"minFeelslikeC": 20,
|
||||
"minFeelslikeF": 67,
|
||||
"avgFeelslikeC": 25,
|
||||
"avgFeelslikeF": 77,
|
||||
"feelslikeC": 20,
|
||||
"feelslikeF": 67,
|
||||
"maxDewpointC": 17,
|
||||
"maxDewpointF": 63,
|
||||
"minDewpointC": 11,
|
||||
"minDewpointF": 52,
|
||||
"avgDewpointC": 14,
|
||||
"avgDewpointF": 57,
|
||||
"dewpointC": 17,
|
||||
"dewpointF": 63,
|
||||
"maxHumidity": 86,
|
||||
"minHumidity": 31,
|
||||
"humidity": 86,
|
||||
"pop": 0,
|
||||
"precipMM": 0,
|
||||
"precipIN": 0,
|
||||
"iceaccum": null,
|
||||
"iceaccumMM": null,
|
||||
"iceaccumIN": null,
|
||||
"snowCM": 0,
|
||||
"snowIN": 0,
|
||||
"pressureMB": 1016,
|
||||
"pressureIN": 29.99,
|
||||
"windDir": "N",
|
||||
"windDirDEG": 356,
|
||||
"windSpeedKTS": 2,
|
||||
"windSpeedKPH": 4,
|
||||
"windSpeedMPH": 2,
|
||||
"windGustKTS": 19,
|
||||
"windGustKPH": 36,
|
||||
"windGustMPH": 22,
|
||||
"windDirMax": "NNW",
|
||||
"windDirMaxDEG": 343,
|
||||
"windSpeedMaxKTS": 8,
|
||||
"windSpeedMaxKPH": 14,
|
||||
"windSpeedMaxMPH": 9,
|
||||
"windDirMin": "N",
|
||||
"windDirMinDEG": 356,
|
||||
"windSpeedMinKTS": 2,
|
||||
"windSpeedMinKPH": 4,
|
||||
"windSpeedMinMPH": 2,
|
||||
"windDir80m": "NW",
|
||||
"windDir80mDEG": 316,
|
||||
"windSpeed80mKTS": 5,
|
||||
"windSpeed80mKPH": 9,
|
||||
"windSpeed80mMPH": 6,
|
||||
"windGust80mKTS": 20,
|
||||
"windGust80mKPH": 36,
|
||||
"windGust80mMPH": 23,
|
||||
"windDirMax80m": "N",
|
||||
"windDirMax80mDEG": 354,
|
||||
"windSpeedMax80mKTS": 20,
|
||||
"windSpeedMax80mKPH": 36,
|
||||
"windSpeedMax80mMPH": 23,
|
||||
"windDirMin80m": "NW",
|
||||
"windDirMin80mDEG": 316,
|
||||
"windSpeedMin80mKTS": 5,
|
||||
"windSpeedMin80mKPH": 9,
|
||||
"windSpeedMin80mMPH": 6,
|
||||
"sky": 47,
|
||||
"cloudsCoded": "SC",
|
||||
"weather": "Partly Cloudy",
|
||||
"weatherCoded": [],
|
||||
"weatherPrimary": "Partly Cloudy",
|
||||
"weatherPrimaryCoded": "::SC",
|
||||
"icon": "pcloudy.png",
|
||||
"visibilityKM": 24.135,
|
||||
"visibilityMI": 15,
|
||||
"uvi": 7,
|
||||
"solradWM2": 4768,
|
||||
"solradMinWM2": 0,
|
||||
"solradMaxWM2": 726,
|
||||
"isDay": true,
|
||||
"maxCoverage": "",
|
||||
"sunrise": 1665287583,
|
||||
"sunset": 1665329491,
|
||||
"sunriseISO": "2022-10-09T05:53:03+02:00",
|
||||
"sunsetISO": "2022-10-09T17:31:31+02:00"
|
||||
},
|
||||
{
|
||||
"timestamp": 1665378000,
|
||||
"validTime": "2022-10-10T07:00:00+02:00",
|
||||
"dateTimeISO": "2022-10-10T07:00:00+02:00",
|
||||
"maxTempC": 31,
|
||||
"maxTempF": 87,
|
||||
"minTempC": 21,
|
||||
"minTempF": 70,
|
||||
"avgTempC": 26,
|
||||
"avgTempF": 78,
|
||||
"tempC": null,
|
||||
"tempF": null,
|
||||
"maxFeelslikeC": 30,
|
||||
"maxFeelslikeF": 86,
|
||||
"minFeelslikeC": 21,
|
||||
"minFeelslikeF": 69,
|
||||
"avgFeelslikeC": 25,
|
||||
"avgFeelslikeF": 78,
|
||||
"feelslikeC": 21,
|
||||
"feelslikeF": 69,
|
||||
"maxDewpointC": 16,
|
||||
"maxDewpointF": 61,
|
||||
"minDewpointC": 13,
|
||||
"minDewpointF": 55,
|
||||
"avgDewpointC": 14,
|
||||
"avgDewpointF": 58,
|
||||
"dewpointC": 16,
|
||||
"dewpointF": 61,
|
||||
"maxHumidity": 75,
|
||||
"minHumidity": 35,
|
||||
"humidity": 75,
|
||||
"pop": 0,
|
||||
"precipMM": 0,
|
||||
"precipIN": 0,
|
||||
"iceaccum": null,
|
||||
"iceaccumMM": null,
|
||||
"iceaccumIN": null,
|
||||
"snowCM": 0,
|
||||
"snowIN": 0,
|
||||
"pressureMB": 1017,
|
||||
"pressureIN": 30.03,
|
||||
"windDir": "N",
|
||||
"windDirDEG": 358,
|
||||
"windSpeedKTS": 2,
|
||||
"windSpeedKPH": 4,
|
||||
"windSpeedMPH": 2,
|
||||
"windGustKTS": 16,
|
||||
"windGustKPH": 30,
|
||||
"windGustMPH": 19,
|
||||
"windDirMax": "N",
|
||||
"windDirMaxDEG": 10,
|
||||
"windSpeedMaxKTS": 8,
|
||||
"windSpeedMaxKPH": 15,
|
||||
"windSpeedMaxMPH": 9,
|
||||
"windDirMin": "N",
|
||||
"windDirMinDEG": 358,
|
||||
"windSpeedMinKTS": 2,
|
||||
"windSpeedMinKPH": 4,
|
||||
"windSpeedMinMPH": 2,
|
||||
"windDir80m": "N",
|
||||
"windDir80mDEG": 8,
|
||||
"windSpeed80mKTS": 7,
|
||||
"windSpeed80mKPH": 13,
|
||||
"windSpeed80mMPH": 8,
|
||||
"windGust80mKTS": 19,
|
||||
"windGust80mKPH": 36,
|
||||
"windGust80mMPH": 22,
|
||||
"windDirMax80m": "N",
|
||||
"windDirMax80mDEG": 10,
|
||||
"windSpeedMax80mKTS": 19,
|
||||
"windSpeedMax80mKPH": 36,
|
||||
"windSpeedMax80mMPH": 22,
|
||||
"windDirMin80m": "E",
|
||||
"windDirMin80mDEG": 91,
|
||||
"windSpeedMin80mKTS": 7,
|
||||
"windSpeedMin80mKPH": 13,
|
||||
"windSpeedMin80mMPH": 8,
|
||||
"sky": 64,
|
||||
"cloudsCoded": "SC",
|
||||
"weather": "Partly Cloudy",
|
||||
"weatherCoded": [],
|
||||
"weatherPrimary": "Partly Cloudy",
|
||||
"weatherPrimaryCoded": "::SC",
|
||||
"icon": "pcloudy.png",
|
||||
"visibilityKM": 24.135,
|
||||
"visibilityMI": 15,
|
||||
"uvi": 6,
|
||||
"solradWM2": 4494,
|
||||
"solradMinWM2": 0,
|
||||
"solradMaxWM2": 597,
|
||||
"isDay": true,
|
||||
"maxCoverage": "",
|
||||
"sunrise": 1665374020,
|
||||
"sunset": 1665415821,
|
||||
"sunriseISO": "2022-10-10T05:53:40+02:00",
|
||||
"sunsetISO": "2022-10-10T17:30:21+02:00"
|
||||
},
|
||||
{
|
||||
"timestamp": 1665464400,
|
||||
"validTime": "2022-10-11T07:00:00+02:00",
|
||||
"dateTimeISO": "2022-10-11T07:00:00+02:00",
|
||||
"maxTempC": 31,
|
||||
"maxTempF": 87,
|
||||
"minTempC": 21,
|
||||
"minTempF": 70,
|
||||
"avgTempC": 26,
|
||||
"avgTempF": 78,
|
||||
"tempC": null,
|
||||
"tempF": null,
|
||||
"maxFeelslikeC": 31,
|
||||
"maxFeelslikeF": 87,
|
||||
"minFeelslikeC": 22,
|
||||
"minFeelslikeF": 72,
|
||||
"avgFeelslikeC": 26,
|
||||
"avgFeelslikeF": 79,
|
||||
"feelslikeC": 22,
|
||||
"feelslikeF": 72,
|
||||
"maxDewpointC": 17,
|
||||
"maxDewpointF": 62,
|
||||
"minDewpointC": 11,
|
||||
"minDewpointF": 51,
|
||||
"avgDewpointC": 13,
|
||||
"avgDewpointF": 55,
|
||||
"dewpointC": 17,
|
||||
"dewpointF": 62,
|
||||
"maxHumidity": 71,
|
||||
"minHumidity": 30,
|
||||
"humidity": 71,
|
||||
"pop": 0,
|
||||
"precipMM": 0,
|
||||
"precipIN": 0,
|
||||
"iceaccum": null,
|
||||
"iceaccumMM": null,
|
||||
"iceaccumIN": null,
|
||||
"snowCM": 0,
|
||||
"snowIN": 0,
|
||||
"pressureMB": 1015,
|
||||
"pressureIN": 29.98,
|
||||
"windDir": "NNE",
|
||||
"windDirDEG": 13,
|
||||
"windSpeedKTS": 8,
|
||||
"windSpeedKPH": 15,
|
||||
"windSpeedMPH": 9,
|
||||
"windGustKTS": 15,
|
||||
"windGustKPH": 28,
|
||||
"windGustMPH": 17,
|
||||
"windDirMax": "NNE",
|
||||
"windDirMaxDEG": 28,
|
||||
"windSpeedMaxKTS": 15,
|
||||
"windSpeedMaxKPH": 28,
|
||||
"windSpeedMaxMPH": 18,
|
||||
"windDirMin": "NNE",
|
||||
"windDirMinDEG": 14,
|
||||
"windSpeedMinKTS": 7,
|
||||
"windSpeedMinKPH": 14,
|
||||
"windSpeedMinMPH": 8,
|
||||
"windDir80m": "NNE",
|
||||
"windDir80mDEG": 16,
|
||||
"windSpeed80mKTS": 10,
|
||||
"windSpeed80mKPH": 19,
|
||||
"windSpeed80mMPH": 12,
|
||||
"windGust80mKTS": 17,
|
||||
"windGust80mKPH": 31,
|
||||
"windGust80mMPH": 19,
|
||||
"windDirMax80m": "NNE",
|
||||
"windDirMax80mDEG": 28,
|
||||
"windSpeedMax80mKTS": 17,
|
||||
"windSpeedMax80mKPH": 31,
|
||||
"windSpeedMax80mMPH": 19,
|
||||
"windDirMin80m": "NNE",
|
||||
"windDirMin80mDEG": 13,
|
||||
"windSpeedMin80mKTS": 9,
|
||||
"windSpeedMin80mKPH": 18,
|
||||
"windSpeedMin80mMPH": 11,
|
||||
"sky": 0,
|
||||
"cloudsCoded": "CL",
|
||||
"weather": "Sunny",
|
||||
"weatherCoded": [],
|
||||
"weatherPrimary": "Sunny",
|
||||
"weatherPrimaryCoded": "::CL",
|
||||
"icon": "sunny.png",
|
||||
"visibilityKM": 24.135,
|
||||
"visibilityMI": 15,
|
||||
"uvi": null,
|
||||
"solradWM2": 5450,
|
||||
"solradMinWM2": 0,
|
||||
"solradMaxWM2": 758,
|
||||
"isDay": true,
|
||||
"maxCoverage": "",
|
||||
"sunrise": 1665460458,
|
||||
"sunset": 1665502153,
|
||||
"sunriseISO": "2022-10-11T05:54:18+02:00",
|
||||
"sunsetISO": "2022-10-11T17:29:13+02:00"
|
||||
},
|
||||
{
|
||||
"timestamp": 1665550800,
|
||||
"validTime": "2022-10-12T07:00:00+02:00",
|
||||
"dateTimeISO": "2022-10-12T07:00:00+02:00",
|
||||
"maxTempC": 31,
|
||||
"maxTempF": 88,
|
||||
"minTempC": 21,
|
||||
"minTempF": 69,
|
||||
"avgTempC": 26,
|
||||
"avgTempF": 79,
|
||||
"tempC": null,
|
||||
"tempF": null,
|
||||
"maxFeelslikeC": 31,
|
||||
"maxFeelslikeF": 88,
|
||||
"minFeelslikeC": 22,
|
||||
"minFeelslikeF": 72,
|
||||
"avgFeelslikeC": 26,
|
||||
"avgFeelslikeF": 80,
|
||||
"feelslikeC": 22,
|
||||
"feelslikeF": 72,
|
||||
"maxDewpointC": 16,
|
||||
"maxDewpointF": 60,
|
||||
"minDewpointC": 11,
|
||||
"minDewpointF": 51,
|
||||
"avgDewpointC": 13,
|
||||
"avgDewpointF": 55,
|
||||
"dewpointC": 16,
|
||||
"dewpointF": 60,
|
||||
"maxHumidity": 68,
|
||||
"minHumidity": 29,
|
||||
"humidity": 68,
|
||||
"pop": 0,
|
||||
"precipMM": 0,
|
||||
"precipIN": 0,
|
||||
"iceaccum": null,
|
||||
"iceaccumMM": null,
|
||||
"iceaccumIN": null,
|
||||
"snowCM": 0,
|
||||
"snowIN": 0,
|
||||
"pressureMB": 1014,
|
||||
"pressureIN": 29.95,
|
||||
"windDir": "NNE",
|
||||
"windDirDEG": 12,
|
||||
"windSpeedKTS": 8,
|
||||
"windSpeedKPH": 15,
|
||||
"windSpeedMPH": 9,
|
||||
"windGustKTS": 15,
|
||||
"windGustKPH": 28,
|
||||
"windGustMPH": 17,
|
||||
"windDirMax": "E",
|
||||
"windDirMaxDEG": 96,
|
||||
"windSpeedMaxKTS": 14,
|
||||
"windSpeedMaxKPH": 26,
|
||||
"windSpeedMaxMPH": 16,
|
||||
"windDirMin": "NNE",
|
||||
"windDirMinDEG": 12,
|
||||
"windSpeedMinKTS": 7,
|
||||
"windSpeedMinKPH": 13,
|
||||
"windSpeedMinMPH": 8,
|
||||
"windDir80m": "NNE",
|
||||
"windDir80mDEG": 15,
|
||||
"windSpeed80mKTS": 10,
|
||||
"windSpeed80mKPH": 19,
|
||||
"windSpeed80mMPH": 12,
|
||||
"windGust80mKTS": 18,
|
||||
"windGust80mKPH": 33,
|
||||
"windGust80mMPH": 21,
|
||||
"windDirMax80m": "E",
|
||||
"windDirMax80mDEG": 96,
|
||||
"windSpeedMax80mKTS": 18,
|
||||
"windSpeedMax80mKPH": 33,
|
||||
"windSpeedMax80mMPH": 21,
|
||||
"windDirMin80m": "NNE",
|
||||
"windDirMin80mDEG": 15,
|
||||
"windSpeedMin80mKTS": 10,
|
||||
"windSpeedMin80mKPH": 18,
|
||||
"windSpeedMin80mMPH": 11,
|
||||
"sky": 27,
|
||||
"cloudsCoded": "FW",
|
||||
"weather": "Mostly Sunny",
|
||||
"weatherCoded": [],
|
||||
"weatherPrimary": "Mostly Sunny",
|
||||
"weatherPrimaryCoded": "::FW",
|
||||
"icon": "fair.png",
|
||||
"visibilityKM": 24.135,
|
||||
"visibilityMI": 15,
|
||||
"uvi": null,
|
||||
"solradWM2": 4740,
|
||||
"solradMinWM2": 0,
|
||||
"solradMaxWM2": 743,
|
||||
"isDay": true,
|
||||
"maxCoverage": "",
|
||||
"sunrise": 1665546895,
|
||||
"sunset": 1665588484,
|
||||
"sunriseISO": "2022-10-12T05:54:55+02:00",
|
||||
"sunsetISO": "2022-10-12T17:28:04+02:00"
|
||||
}
|
||||
],
|
||||
"profile": {
|
||||
"tz": "Africa/Cairo",
|
||||
"elevM": 23,
|
||||
"elevFT": 75
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
691
src/test/resources/Issue593.xml
Normal file
691
src/test/resources/Issue593.xml
Normal file
@@ -0,0 +1,691 @@
|
||||
<success>true</success>
|
||||
<response>
|
||||
<loc>
|
||||
<long>31.25</long>
|
||||
<lat>30.063</lat>
|
||||
</loc>
|
||||
<profile>
|
||||
<elevM>23</elevM>
|
||||
<tz>Africa/Cairo</tz>
|
||||
<elevFT>75</elevFT>
|
||||
</profile>
|
||||
<periods>
|
||||
<dateTimeISO>2022-10-06T07:00:00+02:00</dateTimeISO>
|
||||
<windDirMin80m>E</windDirMin80m>
|
||||
<windDirMin80mDEG>95</windDirMin80mDEG>
|
||||
<feelslikeC>21</feelslikeC>
|
||||
<visibilityMI>15</visibilityMI>
|
||||
<windSpeedMaxMPH>10</windSpeedMaxMPH>
|
||||
<windDirDEG>353</windDirDEG>
|
||||
<windDir>N</windDir>
|
||||
<sunriseISO>2022-10-06T05:51:14+02:00</sunriseISO>
|
||||
<iceaccumMM>null</iceaccumMM>
|
||||
<windSpeedMaxKTS>9</windSpeedMaxKTS>
|
||||
<iceaccumIN>null</iceaccumIN>
|
||||
<minTempF>66</minTempF>
|
||||
<snowIN>0</snowIN>
|
||||
<weather>Mostly Sunny</weather>
|
||||
<sunsetISO>2022-10-06T17:35:02+02:00</sunsetISO>
|
||||
<maxFeelslikeC>32</maxFeelslikeC>
|
||||
<humidity>77</humidity>
|
||||
<windDir80m>N</windDir80m>
|
||||
<maxFeelslikeF>89</maxFeelslikeF>
|
||||
<precipMM>0</precipMM>
|
||||
<sky>22</sky>
|
||||
<windGust80mMPH>25</windGust80mMPH>
|
||||
<windSpeedMax80mMPH>25</windSpeedMax80mMPH>
|
||||
<weatherPrimary>Mostly Sunny</weatherPrimary>
|
||||
<windGust80mKPH>41</windGust80mKPH>
|
||||
<avgDewpointF>58</avgDewpointF>
|
||||
<windSpeedMax80mKPH>41</windSpeedMax80mKPH>
|
||||
<windGust80mKTS>22</windGust80mKTS>
|
||||
<avgDewpointC>14</avgDewpointC>
|
||||
<precipIN>0</precipIN>
|
||||
<windSpeedMax80mKTS>22</windSpeedMax80mKTS>
|
||||
<windDirMinDEG>353</windDirMinDEG>
|
||||
<windSpeedMaxKPH>16</windSpeedMaxKPH>
|
||||
<windSpeedMin80mKTS>8</windSpeedMin80mKTS>
|
||||
<feelslikeF>70</feelslikeF>
|
||||
<validTime>2022-10-06T07:00:00+02:00</validTime>
|
||||
<windSpeedMin80mMPH>10</windSpeedMin80mMPH>
|
||||
<solradMaxWM2>778</solradMaxWM2>
|
||||
<avgTempC>25</avgTempC>
|
||||
<windSpeedMin80mKPH>15</windSpeedMin80mKPH>
|
||||
<weatherPrimaryCoded>::FW</weatherPrimaryCoded>
|
||||
<sunrise>1665028274</sunrise>
|
||||
<avgTempF>78</avgTempF>
|
||||
<windDirMin>N</windDirMin>
|
||||
<maxCoverage/>
|
||||
<icon>fair.png</icon>
|
||||
<minFeelslikeC>21</minFeelslikeC>
|
||||
<dewpointC>17</dewpointC>
|
||||
<cloudsCoded>FW</cloudsCoded>
|
||||
<minFeelslikeF>70</minFeelslikeF>
|
||||
<minHumidity>29</minHumidity>
|
||||
<dewpointF>63</dewpointF>
|
||||
<windSpeed80mKTS>12</windSpeed80mKTS>
|
||||
<pop>0</pop>
|
||||
<snowCM>0</snowCM>
|
||||
<windDirMax>NNW</windDirMax>
|
||||
<windSpeed80mMPH>13</windSpeed80mMPH>
|
||||
<windSpeed80mKPH>22</windSpeed80mKPH>
|
||||
<windDir80mDEG>11</windDir80mDEG>
|
||||
<maxTempC>32</maxTempC>
|
||||
<pressureMB>1015</pressureMB>
|
||||
<visibilityKM>24.135</visibilityKM>
|
||||
<timestamp>1665032400</timestamp>
|
||||
<maxTempF>90</maxTempF>
|
||||
<tempF>null</tempF>
|
||||
<minDewpointC>11</minDewpointC>
|
||||
<solradMinWM2>0</solradMinWM2>
|
||||
<windSpeedMinKTS>1</windSpeedMinKTS>
|
||||
<windDirMax80mDEG>343</windDirMax80mDEG>
|
||||
<windGustKTS>21</windGustKTS>
|
||||
<windSpeedMinKPH>2</windSpeedMinKPH>
|
||||
<maxDewpointF>63</maxDewpointF>
|
||||
<windSpeedMinMPH>1</windSpeedMinMPH>
|
||||
<avgFeelslikeC>26</avgFeelslikeC>
|
||||
<uvi>6</uvi>
|
||||
<windDirMax80m>NNW</windDirMax80m>
|
||||
<maxDewpointC>17</maxDewpointC>
|
||||
<pressureIN>29.97</pressureIN>
|
||||
<avgFeelslikeF>80</avgFeelslikeF>
|
||||
<iceaccum>null</iceaccum>
|
||||
<isDay>true</isDay>
|
||||
<minTempC>19</minTempC>
|
||||
<minDewpointF>52</minDewpointF>
|
||||
<windSpeedKTS>5</windSpeedKTS>
|
||||
<sunset>1665070502</sunset>
|
||||
<solradWM2>5608</solradWM2>
|
||||
<windSpeedKPH>9</windSpeedKPH>
|
||||
<windGustMPH>25</windGustMPH>
|
||||
<maxHumidity>77</maxHumidity>
|
||||
<windSpeedMPH>6</windSpeedMPH>
|
||||
<windGustKPH>40</windGustKPH>
|
||||
<windDirMaxDEG>342</windDirMaxDEG>
|
||||
<tempC>null</tempC>
|
||||
</periods>
|
||||
<periods>
|
||||
<dateTimeISO>2022-10-07T07:00:00+02:00</dateTimeISO>
|
||||
<windDirMin80m>NNW</windDirMin80m>
|
||||
<windDirMin80mDEG>347</windDirMin80mDEG>
|
||||
<feelslikeC>19</feelslikeC>
|
||||
<visibilityMI>15</visibilityMI>
|
||||
<windSpeedMaxMPH>8</windSpeedMaxMPH>
|
||||
<windDirDEG>325</windDirDEG>
|
||||
<windDir>NW</windDir>
|
||||
<sunriseISO>2022-10-07T05:51:50+02:00</sunriseISO>
|
||||
<iceaccumMM>null</iceaccumMM>
|
||||
<windSpeedMaxKTS>7</windSpeedMaxKTS>
|
||||
<iceaccumIN>null</iceaccumIN>
|
||||
<minTempF>66</minTempF>
|
||||
<snowIN>0</snowIN>
|
||||
<weather>Mostly Sunny</weather>
|
||||
<sunsetISO>2022-10-07T17:33:51+02:00</sunsetISO>
|
||||
<maxFeelslikeC>29</maxFeelslikeC>
|
||||
<humidity>77</humidity>
|
||||
<windDir80m>NNW</windDir80m>
|
||||
<maxFeelslikeF>85</maxFeelslikeF>
|
||||
<precipMM>0</precipMM>
|
||||
<sky>30</sky>
|
||||
<windGust80mMPH>23</windGust80mMPH>
|
||||
<windSpeedMax80mMPH>23</windSpeedMax80mMPH>
|
||||
<weatherPrimary>Mostly Sunny</weatherPrimary>
|
||||
<windGust80mKPH>37</windGust80mKPH>
|
||||
<avgDewpointF>54</avgDewpointF>
|
||||
<windSpeedMax80mKPH>37</windSpeedMax80mKPH>
|
||||
<windGust80mKTS>20</windGust80mKTS>
|
||||
<avgDewpointC>12</avgDewpointC>
|
||||
<precipIN>0</precipIN>
|
||||
<windSpeedMax80mKTS>20</windSpeedMax80mKTS>
|
||||
<windDirMinDEG>325</windDirMinDEG>
|
||||
<windSpeedMaxKPH>13</windSpeedMaxKPH>
|
||||
<windSpeedMin80mKTS>6</windSpeedMin80mKTS>
|
||||
<feelslikeF>67</feelslikeF>
|
||||
<validTime>2022-10-07T07:00:00+02:00</validTime>
|
||||
<windSpeedMin80mMPH>6</windSpeedMin80mMPH>
|
||||
<solradMaxWM2>742</solradMaxWM2>
|
||||
<avgTempC>24</avgTempC>
|
||||
<windSpeedMin80mKPH>10</windSpeedMin80mKPH>
|
||||
<weatherPrimaryCoded>::FW</weatherPrimaryCoded>
|
||||
<sunrise>1665114710</sunrise>
|
||||
<avgTempF>76</avgTempF>
|
||||
<windDirMin>NW</windDirMin>
|
||||
<maxCoverage/>
|
||||
<icon>fair.png</icon>
|
||||
<minFeelslikeC>19</minFeelslikeC>
|
||||
<dewpointC>15</dewpointC>
|
||||
<cloudsCoded>FW</cloudsCoded>
|
||||
<minFeelslikeF>67</minFeelslikeF>
|
||||
<minHumidity>30</minHumidity>
|
||||
<dewpointF>60</dewpointF>
|
||||
<windSpeed80mKTS>6</windSpeed80mKTS>
|
||||
<pop>0</pop>
|
||||
<snowCM>0</snowCM>
|
||||
<windDirMax>WNW</windDirMax>
|
||||
<windSpeed80mMPH>6</windSpeed80mMPH>
|
||||
<windSpeed80mKPH>10</windSpeed80mKPH>
|
||||
<windDir80mDEG>347</windDir80mDEG>
|
||||
<maxTempC>30</maxTempC>
|
||||
<pressureMB>1014</pressureMB>
|
||||
<visibilityKM>24.135</visibilityKM>
|
||||
<timestamp>1665118800</timestamp>
|
||||
<maxTempF>86</maxTempF>
|
||||
<tempF>null</tempF>
|
||||
<minDewpointC>10</minDewpointC>
|
||||
<solradMinWM2>0</solradMinWM2>
|
||||
<windSpeedMinKTS>1</windSpeedMinKTS>
|
||||
<windDirMax80mDEG>316</windDirMax80mDEG>
|
||||
<windGustKTS>16</windGustKTS>
|
||||
<windSpeedMinKPH>2</windSpeedMinKPH>
|
||||
<maxDewpointF>60</maxDewpointF>
|
||||
<windSpeedMinMPH>1</windSpeedMinMPH>
|
||||
<avgFeelslikeC>24</avgFeelslikeC>
|
||||
<uvi>6</uvi>
|
||||
<windDirMax80m>NW</windDirMax80m>
|
||||
<maxDewpointC>15</maxDewpointC>
|
||||
<pressureIN>29.95</pressureIN>
|
||||
<avgFeelslikeF>76</avgFeelslikeF>
|
||||
<iceaccum>null</iceaccum>
|
||||
<isDay>true</isDay>
|
||||
<minTempC>19</minTempC>
|
||||
<minDewpointF>50</minDewpointF>
|
||||
<windSpeedKTS>1</windSpeedKTS>
|
||||
<sunset>1665156831</sunset>
|
||||
<solradWM2>5486</solradWM2>
|
||||
<windSpeedKPH>2</windSpeedKPH>
|
||||
<windGustMPH>18</windGustMPH>
|
||||
<maxHumidity>77</maxHumidity>
|
||||
<windSpeedMPH>1</windSpeedMPH>
|
||||
<windGustKPH>29</windGustKPH>
|
||||
<windDirMaxDEG>298</windDirMaxDEG>
|
||||
<tempC>null</tempC>
|
||||
</periods>
|
||||
<periods>
|
||||
<dateTimeISO>2022-10-08T07:00:00+02:00</dateTimeISO>
|
||||
<windDirMin80m>NW</windDirMin80m>
|
||||
<windDirMin80mDEG>309</windDirMin80mDEG>
|
||||
<feelslikeC>19</feelslikeC>
|
||||
<visibilityMI>15</visibilityMI>
|
||||
<windSpeedMaxMPH>8</windSpeedMaxMPH>
|
||||
<windDirDEG>21</windDirDEG>
|
||||
<windDir>NNE</windDir>
|
||||
<sunriseISO>2022-10-08T05:52:26+02:00</sunriseISO>
|
||||
<iceaccumMM>null</iceaccumMM>
|
||||
<windSpeedMaxKTS>7</windSpeedMaxKTS>
|
||||
<iceaccumIN>null</iceaccumIN>
|
||||
<minTempF>66</minTempF>
|
||||
<snowIN>0</snowIN>
|
||||
<weather>Partly Cloudy</weather>
|
||||
<sunsetISO>2022-10-08T17:32:41+02:00</sunsetISO>
|
||||
<maxFeelslikeC>30</maxFeelslikeC>
|
||||
<humidity>76</humidity>
|
||||
<windDir80m>NW</windDir80m>
|
||||
<maxFeelslikeF>86</maxFeelslikeF>
|
||||
<precipMM>0</precipMM>
|
||||
<sky>47</sky>
|
||||
<windGust80mMPH>19</windGust80mMPH>
|
||||
<windSpeedMax80mMPH>19</windSpeedMax80mMPH>
|
||||
<weatherPrimary>Partly Cloudy</weatherPrimary>
|
||||
<windGust80mKPH>31</windGust80mKPH>
|
||||
<avgDewpointF>56</avgDewpointF>
|
||||
<windSpeedMax80mKPH>31</windSpeedMax80mKPH>
|
||||
<windGust80mKTS>17</windGust80mKTS>
|
||||
<avgDewpointC>13</avgDewpointC>
|
||||
<precipIN>0</precipIN>
|
||||
<windSpeedMax80mKTS>17</windSpeedMax80mKTS>
|
||||
<windDirMinDEG>21</windDirMinDEG>
|
||||
<windSpeedMaxKPH>13</windSpeedMaxKPH>
|
||||
<windSpeedMin80mKTS>5</windSpeedMin80mKTS>
|
||||
<feelslikeF>67</feelslikeF>
|
||||
<validTime>2022-10-08T07:00:00+02:00</validTime>
|
||||
<windSpeedMin80mMPH>5</windSpeedMin80mMPH>
|
||||
<solradMaxWM2>682</solradMaxWM2>
|
||||
<avgTempC>25</avgTempC>
|
||||
<windSpeedMin80mKPH>9</windSpeedMin80mKPH>
|
||||
<weatherPrimaryCoded>::SC</weatherPrimaryCoded>
|
||||
<sunrise>1665201146</sunrise>
|
||||
<avgTempF>76</avgTempF>
|
||||
<windDirMin>NNE</windDirMin>
|
||||
<maxCoverage/>
|
||||
<icon>pcloudy.png</icon>
|
||||
<minFeelslikeC>19</minFeelslikeC>
|
||||
<dewpointC>15</dewpointC>
|
||||
<cloudsCoded>SC</cloudsCoded>
|
||||
<minFeelslikeF>67</minFeelslikeF>
|
||||
<minHumidity>32</minHumidity>
|
||||
<dewpointF>59</dewpointF>
|
||||
<windSpeed80mKTS>5</windSpeed80mKTS>
|
||||
<pop>0</pop>
|
||||
<snowCM>0</snowCM>
|
||||
<windDirMax>WNW</windDirMax>
|
||||
<windSpeed80mMPH>5</windSpeed80mMPH>
|
||||
<windSpeed80mKPH>9</windSpeed80mKPH>
|
||||
<windDir80mDEG>309</windDir80mDEG>
|
||||
<maxTempC>30</maxTempC>
|
||||
<pressureMB>1014</pressureMB>
|
||||
<visibilityKM>24.135</visibilityKM>
|
||||
<timestamp>1665205200</timestamp>
|
||||
<maxTempF>87</maxTempF>
|
||||
<tempF>null</tempF>
|
||||
<minDewpointC>11</minDewpointC>
|
||||
<solradMinWM2>0</solradMinWM2>
|
||||
<windSpeedMinKTS>1</windSpeedMinKTS>
|
||||
<windDirMax80mDEG>322</windDirMax80mDEG>
|
||||
<windGustKTS>17</windGustKTS>
|
||||
<windSpeedMinKPH>2</windSpeedMinKPH>
|
||||
<maxDewpointF>59</maxDewpointF>
|
||||
<windSpeedMinMPH>1</windSpeedMinMPH>
|
||||
<avgFeelslikeC>25</avgFeelslikeC>
|
||||
<uvi>7</uvi>
|
||||
<windDirMax80m>NW</windDirMax80m>
|
||||
<maxDewpointC>15</maxDewpointC>
|
||||
<pressureIN>29.94</pressureIN>
|
||||
<avgFeelslikeF>76</avgFeelslikeF>
|
||||
<iceaccum>null</iceaccum>
|
||||
<isDay>true</isDay>
|
||||
<minTempC>19</minTempC>
|
||||
<minDewpointF>52</minDewpointF>
|
||||
<windSpeedKTS>1</windSpeedKTS>
|
||||
<sunset>1665243161</sunset>
|
||||
<solradWM2>4785</solradWM2>
|
||||
<windSpeedKPH>2</windSpeedKPH>
|
||||
<windGustMPH>20</windGustMPH>
|
||||
<maxHumidity>76</maxHumidity>
|
||||
<windSpeedMPH>1</windSpeedMPH>
|
||||
<windGustKPH>32</windGustKPH>
|
||||
<windDirMaxDEG>301</windDirMaxDEG>
|
||||
<tempC>null</tempC>
|
||||
</periods>
|
||||
<periods>
|
||||
<dateTimeISO>2022-10-09T07:00:00+02:00</dateTimeISO>
|
||||
<windDirMin80m>NW</windDirMin80m>
|
||||
<windDirMin80mDEG>316</windDirMin80mDEG>
|
||||
<feelslikeC>20</feelslikeC>
|
||||
<visibilityMI>15</visibilityMI>
|
||||
<windSpeedMaxMPH>9</windSpeedMaxMPH>
|
||||
<windDirDEG>356</windDirDEG>
|
||||
<windDir>N</windDir>
|
||||
<sunriseISO>2022-10-09T05:53:03+02:00</sunriseISO>
|
||||
<iceaccumMM>null</iceaccumMM>
|
||||
<windSpeedMaxKTS>8</windSpeedMaxKTS>
|
||||
<iceaccumIN>null</iceaccumIN>
|
||||
<minTempF>67</minTempF>
|
||||
<snowIN>0</snowIN>
|
||||
<weather>Partly Cloudy</weather>
|
||||
<sunsetISO>2022-10-09T17:31:31+02:00</sunsetISO>
|
||||
<maxFeelslikeC>30</maxFeelslikeC>
|
||||
<humidity>86</humidity>
|
||||
<windDir80m>NW</windDir80m>
|
||||
<maxFeelslikeF>86</maxFeelslikeF>
|
||||
<precipMM>0</precipMM>
|
||||
<sky>47</sky>
|
||||
<windGust80mMPH>23</windGust80mMPH>
|
||||
<windSpeedMax80mMPH>23</windSpeedMax80mMPH>
|
||||
<weatherPrimary>Partly Cloudy</weatherPrimary>
|
||||
<windGust80mKPH>36</windGust80mKPH>
|
||||
<avgDewpointF>57</avgDewpointF>
|
||||
<windSpeedMax80mKPH>36</windSpeedMax80mKPH>
|
||||
<windGust80mKTS>20</windGust80mKTS>
|
||||
<avgDewpointC>14</avgDewpointC>
|
||||
<precipIN>0</precipIN>
|
||||
<windSpeedMax80mKTS>20</windSpeedMax80mKTS>
|
||||
<windDirMinDEG>356</windDirMinDEG>
|
||||
<windSpeedMaxKPH>14</windSpeedMaxKPH>
|
||||
<windSpeedMin80mKTS>5</windSpeedMin80mKTS>
|
||||
<feelslikeF>67</feelslikeF>
|
||||
<validTime>2022-10-09T07:00:00+02:00</validTime>
|
||||
<windSpeedMin80mMPH>6</windSpeedMin80mMPH>
|
||||
<solradMaxWM2>726</solradMaxWM2>
|
||||
<avgTempC>25</avgTempC>
|
||||
<windSpeedMin80mKPH>9</windSpeedMin80mKPH>
|
||||
<weatherPrimaryCoded>::SC</weatherPrimaryCoded>
|
||||
<sunrise>1665287583</sunrise>
|
||||
<avgTempF>77</avgTempF>
|
||||
<windDirMin>N</windDirMin>
|
||||
<maxCoverage/>
|
||||
<icon>pcloudy.png</icon>
|
||||
<minFeelslikeC>20</minFeelslikeC>
|
||||
<dewpointC>17</dewpointC>
|
||||
<cloudsCoded>SC</cloudsCoded>
|
||||
<minFeelslikeF>67</minFeelslikeF>
|
||||
<minHumidity>31</minHumidity>
|
||||
<dewpointF>63</dewpointF>
|
||||
<windSpeed80mKTS>5</windSpeed80mKTS>
|
||||
<pop>0</pop>
|
||||
<snowCM>0</snowCM>
|
||||
<windDirMax>NNW</windDirMax>
|
||||
<windSpeed80mMPH>6</windSpeed80mMPH>
|
||||
<windSpeed80mKPH>9</windSpeed80mKPH>
|
||||
<windDir80mDEG>316</windDir80mDEG>
|
||||
<maxTempC>31</maxTempC>
|
||||
<pressureMB>1016</pressureMB>
|
||||
<visibilityKM>24.135</visibilityKM>
|
||||
<timestamp>1665291600</timestamp>
|
||||
<maxTempF>87</maxTempF>
|
||||
<tempF>null</tempF>
|
||||
<minDewpointC>11</minDewpointC>
|
||||
<solradMinWM2>0</solradMinWM2>
|
||||
<windSpeedMinKTS>2</windSpeedMinKTS>
|
||||
<windDirMax80mDEG>354</windDirMax80mDEG>
|
||||
<windGustKTS>19</windGustKTS>
|
||||
<windSpeedMinKPH>4</windSpeedMinKPH>
|
||||
<maxDewpointF>63</maxDewpointF>
|
||||
<windSpeedMinMPH>2</windSpeedMinMPH>
|
||||
<avgFeelslikeC>25</avgFeelslikeC>
|
||||
<uvi>7</uvi>
|
||||
<windDirMax80m>N</windDirMax80m>
|
||||
<maxDewpointC>17</maxDewpointC>
|
||||
<pressureIN>29.99</pressureIN>
|
||||
<avgFeelslikeF>77</avgFeelslikeF>
|
||||
<iceaccum>null</iceaccum>
|
||||
<isDay>true</isDay>
|
||||
<minTempC>19</minTempC>
|
||||
<minDewpointF>52</minDewpointF>
|
||||
<windSpeedKTS>2</windSpeedKTS>
|
||||
<sunset>1665329491</sunset>
|
||||
<solradWM2>4768</solradWM2>
|
||||
<windSpeedKPH>4</windSpeedKPH>
|
||||
<windGustMPH>22</windGustMPH>
|
||||
<maxHumidity>86</maxHumidity>
|
||||
<windSpeedMPH>2</windSpeedMPH>
|
||||
<windGustKPH>36</windGustKPH>
|
||||
<windDirMaxDEG>343</windDirMaxDEG>
|
||||
<tempC>null</tempC>
|
||||
</periods>
|
||||
<periods>
|
||||
<dateTimeISO>2022-10-10T07:00:00+02:00</dateTimeISO>
|
||||
<windDirMin80m>E</windDirMin80m>
|
||||
<windDirMin80mDEG>91</windDirMin80mDEG>
|
||||
<feelslikeC>21</feelslikeC>
|
||||
<visibilityMI>15</visibilityMI>
|
||||
<windSpeedMaxMPH>9</windSpeedMaxMPH>
|
||||
<windDirDEG>358</windDirDEG>
|
||||
<windDir>N</windDir>
|
||||
<sunriseISO>2022-10-10T05:53:40+02:00</sunriseISO>
|
||||
<iceaccumMM>null</iceaccumMM>
|
||||
<windSpeedMaxKTS>8</windSpeedMaxKTS>
|
||||
<iceaccumIN>null</iceaccumIN>
|
||||
<minTempF>70</minTempF>
|
||||
<snowIN>0</snowIN>
|
||||
<weather>Partly Cloudy</weather>
|
||||
<sunsetISO>2022-10-10T17:30:21+02:00</sunsetISO>
|
||||
<maxFeelslikeC>30</maxFeelslikeC>
|
||||
<humidity>75</humidity>
|
||||
<windDir80m>N</windDir80m>
|
||||
<maxFeelslikeF>86</maxFeelslikeF>
|
||||
<precipMM>0</precipMM>
|
||||
<sky>64</sky>
|
||||
<windGust80mMPH>22</windGust80mMPH>
|
||||
<windSpeedMax80mMPH>22</windSpeedMax80mMPH>
|
||||
<weatherPrimary>Partly Cloudy</weatherPrimary>
|
||||
<windGust80mKPH>36</windGust80mKPH>
|
||||
<avgDewpointF>58</avgDewpointF>
|
||||
<windSpeedMax80mKPH>36</windSpeedMax80mKPH>
|
||||
<windGust80mKTS>19</windGust80mKTS>
|
||||
<avgDewpointC>14</avgDewpointC>
|
||||
<precipIN>0</precipIN>
|
||||
<windSpeedMax80mKTS>19</windSpeedMax80mKTS>
|
||||
<windDirMinDEG>358</windDirMinDEG>
|
||||
<windSpeedMaxKPH>15</windSpeedMaxKPH>
|
||||
<windSpeedMin80mKTS>7</windSpeedMin80mKTS>
|
||||
<feelslikeF>69</feelslikeF>
|
||||
<validTime>2022-10-10T07:00:00+02:00</validTime>
|
||||
<windSpeedMin80mMPH>8</windSpeedMin80mMPH>
|
||||
<solradMaxWM2>597</solradMaxWM2>
|
||||
<avgTempC>26</avgTempC>
|
||||
<windSpeedMin80mKPH>13</windSpeedMin80mKPH>
|
||||
<weatherPrimaryCoded>::SC</weatherPrimaryCoded>
|
||||
<sunrise>1665374020</sunrise>
|
||||
<avgTempF>78</avgTempF>
|
||||
<windDirMin>N</windDirMin>
|
||||
<maxCoverage/>
|
||||
<icon>pcloudy.png</icon>
|
||||
<minFeelslikeC>21</minFeelslikeC>
|
||||
<dewpointC>16</dewpointC>
|
||||
<cloudsCoded>SC</cloudsCoded>
|
||||
<minFeelslikeF>69</minFeelslikeF>
|
||||
<minHumidity>35</minHumidity>
|
||||
<dewpointF>61</dewpointF>
|
||||
<windSpeed80mKTS>7</windSpeed80mKTS>
|
||||
<pop>0</pop>
|
||||
<snowCM>0</snowCM>
|
||||
<windDirMax>N</windDirMax>
|
||||
<windSpeed80mMPH>8</windSpeed80mMPH>
|
||||
<windSpeed80mKPH>13</windSpeed80mKPH>
|
||||
<windDir80mDEG>8</windDir80mDEG>
|
||||
<maxTempC>31</maxTempC>
|
||||
<pressureMB>1017</pressureMB>
|
||||
<visibilityKM>24.135</visibilityKM>
|
||||
<timestamp>1665378000</timestamp>
|
||||
<maxTempF>87</maxTempF>
|
||||
<tempF>null</tempF>
|
||||
<minDewpointC>13</minDewpointC>
|
||||
<solradMinWM2>0</solradMinWM2>
|
||||
<windSpeedMinKTS>2</windSpeedMinKTS>
|
||||
<windDirMax80mDEG>10</windDirMax80mDEG>
|
||||
<windGustKTS>16</windGustKTS>
|
||||
<windSpeedMinKPH>4</windSpeedMinKPH>
|
||||
<maxDewpointF>61</maxDewpointF>
|
||||
<windSpeedMinMPH>2</windSpeedMinMPH>
|
||||
<avgFeelslikeC>25</avgFeelslikeC>
|
||||
<uvi>6</uvi>
|
||||
<windDirMax80m>N</windDirMax80m>
|
||||
<maxDewpointC>16</maxDewpointC>
|
||||
<pressureIN>30.03</pressureIN>
|
||||
<avgFeelslikeF>78</avgFeelslikeF>
|
||||
<iceaccum>null</iceaccum>
|
||||
<isDay>true</isDay>
|
||||
<minTempC>21</minTempC>
|
||||
<minDewpointF>55</minDewpointF>
|
||||
<windSpeedKTS>2</windSpeedKTS>
|
||||
<sunset>1665415821</sunset>
|
||||
<solradWM2>4494</solradWM2>
|
||||
<windSpeedKPH>4</windSpeedKPH>
|
||||
<windGustMPH>19</windGustMPH>
|
||||
<maxHumidity>75</maxHumidity>
|
||||
<windSpeedMPH>2</windSpeedMPH>
|
||||
<windGustKPH>30</windGustKPH>
|
||||
<windDirMaxDEG>10</windDirMaxDEG>
|
||||
<tempC>null</tempC>
|
||||
</periods>
|
||||
<periods>
|
||||
<dateTimeISO>2022-10-11T07:00:00+02:00</dateTimeISO>
|
||||
<windDirMin80m>NNE</windDirMin80m>
|
||||
<windDirMin80mDEG>13</windDirMin80mDEG>
|
||||
<feelslikeC>22</feelslikeC>
|
||||
<visibilityMI>15</visibilityMI>
|
||||
<windSpeedMaxMPH>18</windSpeedMaxMPH>
|
||||
<windDirDEG>13</windDirDEG>
|
||||
<windDir>NNE</windDir>
|
||||
<sunriseISO>2022-10-11T05:54:18+02:00</sunriseISO>
|
||||
<iceaccumMM>null</iceaccumMM>
|
||||
<windSpeedMaxKTS>15</windSpeedMaxKTS>
|
||||
<iceaccumIN>null</iceaccumIN>
|
||||
<minTempF>70</minTempF>
|
||||
<snowIN>0</snowIN>
|
||||
<weather>Sunny</weather>
|
||||
<sunsetISO>2022-10-11T17:29:13+02:00</sunsetISO>
|
||||
<maxFeelslikeC>31</maxFeelslikeC>
|
||||
<humidity>71</humidity>
|
||||
<windDir80m>NNE</windDir80m>
|
||||
<maxFeelslikeF>87</maxFeelslikeF>
|
||||
<precipMM>0</precipMM>
|
||||
<sky>0</sky>
|
||||
<windGust80mMPH>19</windGust80mMPH>
|
||||
<windSpeedMax80mMPH>19</windSpeedMax80mMPH>
|
||||
<weatherPrimary>Sunny</weatherPrimary>
|
||||
<windGust80mKPH>31</windGust80mKPH>
|
||||
<avgDewpointF>55</avgDewpointF>
|
||||
<windSpeedMax80mKPH>31</windSpeedMax80mKPH>
|
||||
<windGust80mKTS>17</windGust80mKTS>
|
||||
<avgDewpointC>13</avgDewpointC>
|
||||
<precipIN>0</precipIN>
|
||||
<windSpeedMax80mKTS>17</windSpeedMax80mKTS>
|
||||
<windDirMinDEG>14</windDirMinDEG>
|
||||
<windSpeedMaxKPH>28</windSpeedMaxKPH>
|
||||
<windSpeedMin80mKTS>9</windSpeedMin80mKTS>
|
||||
<feelslikeF>72</feelslikeF>
|
||||
<validTime>2022-10-11T07:00:00+02:00</validTime>
|
||||
<windSpeedMin80mMPH>11</windSpeedMin80mMPH>
|
||||
<solradMaxWM2>758</solradMaxWM2>
|
||||
<avgTempC>26</avgTempC>
|
||||
<windSpeedMin80mKPH>18</windSpeedMin80mKPH>
|
||||
<weatherPrimaryCoded>::CL</weatherPrimaryCoded>
|
||||
<sunrise>1665460458</sunrise>
|
||||
<avgTempF>78</avgTempF>
|
||||
<windDirMin>NNE</windDirMin>
|
||||
<maxCoverage/>
|
||||
<icon>sunny.png</icon>
|
||||
<minFeelslikeC>22</minFeelslikeC>
|
||||
<dewpointC>17</dewpointC>
|
||||
<cloudsCoded>CL</cloudsCoded>
|
||||
<minFeelslikeF>72</minFeelslikeF>
|
||||
<minHumidity>30</minHumidity>
|
||||
<dewpointF>62</dewpointF>
|
||||
<windSpeed80mKTS>10</windSpeed80mKTS>
|
||||
<pop>0</pop>
|
||||
<snowCM>0</snowCM>
|
||||
<windDirMax>NNE</windDirMax>
|
||||
<windSpeed80mMPH>12</windSpeed80mMPH>
|
||||
<windSpeed80mKPH>19</windSpeed80mKPH>
|
||||
<windDir80mDEG>16</windDir80mDEG>
|
||||
<maxTempC>31</maxTempC>
|
||||
<pressureMB>1015</pressureMB>
|
||||
<visibilityKM>24.135</visibilityKM>
|
||||
<timestamp>1665464400</timestamp>
|
||||
<maxTempF>87</maxTempF>
|
||||
<tempF>null</tempF>
|
||||
<minDewpointC>11</minDewpointC>
|
||||
<solradMinWM2>0</solradMinWM2>
|
||||
<windSpeedMinKTS>7</windSpeedMinKTS>
|
||||
<windDirMax80mDEG>28</windDirMax80mDEG>
|
||||
<windGustKTS>15</windGustKTS>
|
||||
<windSpeedMinKPH>14</windSpeedMinKPH>
|
||||
<maxDewpointF>62</maxDewpointF>
|
||||
<windSpeedMinMPH>8</windSpeedMinMPH>
|
||||
<avgFeelslikeC>26</avgFeelslikeC>
|
||||
<uvi>null</uvi>
|
||||
<windDirMax80m>NNE</windDirMax80m>
|
||||
<maxDewpointC>17</maxDewpointC>
|
||||
<pressureIN>29.98</pressureIN>
|
||||
<avgFeelslikeF>79</avgFeelslikeF>
|
||||
<iceaccum>null</iceaccum>
|
||||
<isDay>true</isDay>
|
||||
<minTempC>21</minTempC>
|
||||
<minDewpointF>51</minDewpointF>
|
||||
<windSpeedKTS>8</windSpeedKTS>
|
||||
<sunset>1665502153</sunset>
|
||||
<solradWM2>5450</solradWM2>
|
||||
<windSpeedKPH>15</windSpeedKPH>
|
||||
<windGustMPH>17</windGustMPH>
|
||||
<maxHumidity>71</maxHumidity>
|
||||
<windSpeedMPH>9</windSpeedMPH>
|
||||
<windGustKPH>28</windGustKPH>
|
||||
<windDirMaxDEG>28</windDirMaxDEG>
|
||||
<tempC>null</tempC>
|
||||
</periods>
|
||||
<periods>
|
||||
<dateTimeISO>2022-10-12T07:00:00+02:00</dateTimeISO>
|
||||
<windDirMin80m>NNE</windDirMin80m>
|
||||
<windDirMin80mDEG>15</windDirMin80mDEG>
|
||||
<feelslikeC>22</feelslikeC>
|
||||
<visibilityMI>15</visibilityMI>
|
||||
<windSpeedMaxMPH>16</windSpeedMaxMPH>
|
||||
<windDirDEG>12</windDirDEG>
|
||||
<windDir>NNE</windDir>
|
||||
<sunriseISO>2022-10-12T05:54:55+02:00</sunriseISO>
|
||||
<iceaccumMM>null</iceaccumMM>
|
||||
<windSpeedMaxKTS>14</windSpeedMaxKTS>
|
||||
<iceaccumIN>null</iceaccumIN>
|
||||
<minTempF>69</minTempF>
|
||||
<snowIN>0</snowIN>
|
||||
<weather>Mostly Sunny</weather>
|
||||
<sunsetISO>2022-10-12T17:28:04+02:00</sunsetISO>
|
||||
<maxFeelslikeC>31</maxFeelslikeC>
|
||||
<humidity>68</humidity>
|
||||
<windDir80m>NNE</windDir80m>
|
||||
<maxFeelslikeF>88</maxFeelslikeF>
|
||||
<precipMM>0</precipMM>
|
||||
<sky>27</sky>
|
||||
<windGust80mMPH>21</windGust80mMPH>
|
||||
<windSpeedMax80mMPH>21</windSpeedMax80mMPH>
|
||||
<weatherPrimary>Mostly Sunny</weatherPrimary>
|
||||
<windGust80mKPH>33</windGust80mKPH>
|
||||
<avgDewpointF>55</avgDewpointF>
|
||||
<windSpeedMax80mKPH>33</windSpeedMax80mKPH>
|
||||
<windGust80mKTS>18</windGust80mKTS>
|
||||
<avgDewpointC>13</avgDewpointC>
|
||||
<precipIN>0</precipIN>
|
||||
<windSpeedMax80mKTS>18</windSpeedMax80mKTS>
|
||||
<windDirMinDEG>12</windDirMinDEG>
|
||||
<windSpeedMaxKPH>26</windSpeedMaxKPH>
|
||||
<windSpeedMin80mKTS>10</windSpeedMin80mKTS>
|
||||
<feelslikeF>72</feelslikeF>
|
||||
<validTime>2022-10-12T07:00:00+02:00</validTime>
|
||||
<windSpeedMin80mMPH>11</windSpeedMin80mMPH>
|
||||
<solradMaxWM2>743</solradMaxWM2>
|
||||
<avgTempC>26</avgTempC>
|
||||
<windSpeedMin80mKPH>18</windSpeedMin80mKPH>
|
||||
<weatherPrimaryCoded>::FW</weatherPrimaryCoded>
|
||||
<sunrise>1665546895</sunrise>
|
||||
<avgTempF>79</avgTempF>
|
||||
<windDirMin>NNE</windDirMin>
|
||||
<maxCoverage/>
|
||||
<icon>fair.png</icon>
|
||||
<minFeelslikeC>22</minFeelslikeC>
|
||||
<dewpointC>16</dewpointC>
|
||||
<cloudsCoded>FW</cloudsCoded>
|
||||
<minFeelslikeF>72</minFeelslikeF>
|
||||
<minHumidity>29</minHumidity>
|
||||
<dewpointF>60</dewpointF>
|
||||
<windSpeed80mKTS>10</windSpeed80mKTS>
|
||||
<pop>0</pop>
|
||||
<snowCM>0</snowCM>
|
||||
<windDirMax>E</windDirMax>
|
||||
<windSpeed80mMPH>12</windSpeed80mMPH>
|
||||
<windSpeed80mKPH>19</windSpeed80mKPH>
|
||||
<windDir80mDEG>15</windDir80mDEG>
|
||||
<maxTempC>31</maxTempC>
|
||||
<pressureMB>1014</pressureMB>
|
||||
<visibilityKM>24.135</visibilityKM>
|
||||
<timestamp>1665550800</timestamp>
|
||||
<maxTempF>88</maxTempF>
|
||||
<tempF>null</tempF>
|
||||
<minDewpointC>11</minDewpointC>
|
||||
<solradMinWM2>0</solradMinWM2>
|
||||
<windSpeedMinKTS>7</windSpeedMinKTS>
|
||||
<windDirMax80mDEG>96</windDirMax80mDEG>
|
||||
<windGustKTS>15</windGustKTS>
|
||||
<windSpeedMinKPH>13</windSpeedMinKPH>
|
||||
<maxDewpointF>60</maxDewpointF>
|
||||
<windSpeedMinMPH>8</windSpeedMinMPH>
|
||||
<avgFeelslikeC>26</avgFeelslikeC>
|
||||
<uvi>null</uvi>
|
||||
<windDirMax80m>E</windDirMax80m>
|
||||
<maxDewpointC>16</maxDewpointC>
|
||||
<pressureIN>29.95</pressureIN>
|
||||
<avgFeelslikeF>80</avgFeelslikeF>
|
||||
<iceaccum>null</iceaccum>
|
||||
<isDay>true</isDay>
|
||||
<minTempC>21</minTempC>
|
||||
<minDewpointF>51</minDewpointF>
|
||||
<windSpeedKTS>8</windSpeedKTS>
|
||||
<sunset>1665588484</sunset>
|
||||
<solradWM2>4740</solradWM2>
|
||||
<windSpeedKPH>15</windSpeedKPH>
|
||||
<windGustMPH>17</windGustMPH>
|
||||
<maxHumidity>68</maxHumidity>
|
||||
<windSpeedMPH>9</windSpeedMPH>
|
||||
<windGustKPH>28</windGustKPH>
|
||||
<windDirMaxDEG>96</windDirMaxDEG>
|
||||
<tempC>null</tempC>
|
||||
</periods>
|
||||
<interval>day</interval>
|
||||
<place>
|
||||
<country>eg</country>
|
||||
<name>cairo</name>
|
||||
<state>qh</state>
|
||||
</place>
|
||||
</response>
|
||||
<error>null</error>
|
||||
Reference in New Issue
Block a user