@@ -24,23 +24,23 @@ Java 17 and later, [Java 11](https://github.com/javadev/underscore-java) or [Kot
24
24
25
25
## Installation
26
26
27
- Include the following in your ` pom.xml ` for Maven :
27
+ To configure your Maven project, add the following code to your pom.xml file :
28
28
29
- ```
29
+ ``` xml
30
30
<dependencies >
31
31
<dependency >
32
32
<groupId >com.github.javadev</groupId >
33
33
<artifactId >underscore17</artifactId >
34
- <version>1.66 </version>
34
+ <version >1.67 </version >
35
35
</dependency >
36
36
...
37
37
</dependencies >
38
38
```
39
39
40
- Gradle:
40
+ Gradle configuration :
41
41
42
42
``` groovy
43
- implementation 'com.github.javadev:underscore17:1.66 '
43
+ implementation 'com.github.javadev:underscore17:1.67 '
44
44
```
45
45
46
46
### Usage
@@ -91,7 +91,7 @@ U.xmlToJson(
91
91
+ " <many>elements</many>\n "
92
92
+ " <many>more elements</many>\n "
93
93
+ " </and>\n "
94
- + " <plus a=\" complex\" >\n "
94
+ + " <plus a=\" complex\" >\n "
95
95
+ " element as well\n "
96
96
+ " </plus>\n "
97
97
+ " </mydocument>" ,
@@ -113,6 +113,45 @@ U.xmlToJson(
113
113
// "#omit-xml-declaration": "yes"
114
114
// }
115
115
116
+ U . xmlToJsonMinimum(
117
+ " <data>\n "
118
+ + " <string>Example Text</string>\n "
119
+ + " <integer>42</integer>\n "
120
+ + " <float>3.14</float>\n "
121
+ + " <boolean>true</boolean>\n "
122
+ + " <date>2025-02-26</date>\n "
123
+ + " <time>14:30:00</time>\n "
124
+ + " <datetime>2025-02-26T14:30:00Z</datetime>\n "
125
+ + " <array>Item 1</array>\n "
126
+ + " <array>Item 2</array>\n "
127
+ + " <object>\n "
128
+ + " <key1>Value 1</key1>\n "
129
+ + " <key2>Value 2</key2>\n "
130
+ + " </object>\n "
131
+ + " <null/>\n "
132
+ + " </data>\n " ,
133
+ Json . JsonStringBuilder . Step . TWO_SPACES );
134
+ // {
135
+ // "data": {
136
+ // "string": "Example Text",
137
+ // "integer": "42",
138
+ // "float": "3.14",
139
+ // "boolean": "true",
140
+ // "date": "2025-02-26",
141
+ // "time": "14:30:00",
142
+ // "datetime": "2025-02-26T14:30:00Z",
143
+ // "array": [
144
+ // "Item 1",
145
+ // "Item 2"
146
+ // ],
147
+ // "object": {
148
+ // "key1": "Value 1",
149
+ // "key2": "Value 2"
150
+ // },
151
+ // "null": ""
152
+ // }
153
+ // }
154
+
116
155
U . jsonToXml(
117
156
" {\n "
118
157
+ " \" mydocument\" : {\n "
@@ -141,6 +180,45 @@ U.jsonToXml(
141
180
// </plus>
142
181
// </mydocument>
143
182
183
+ U . jsonToXmlMinimum(
184
+ " {\n "
185
+ + " \" data\" : {\n "
186
+ + " \" string\" : \" Example Text\" ,\n "
187
+ + " \" integer\" : \" 42\" ,\n "
188
+ + " \" float\" : \" 3.14\" ,\n "
189
+ + " \" boolean\" : \" true\" ,\n "
190
+ + " \" date\" : \" 2025-02-26\" ,\n "
191
+ + " \" time\" : \" 14:30:00\" ,\n "
192
+ + " \" datetime\" : \" 2025-02-26T14:30:00Z\" ,\n "
193
+ + " \" array\" : [\n "
194
+ + " \" Item 1\" ,\n "
195
+ + " \" Item 2\"\n "
196
+ + " ],\n "
197
+ + " \" object\" : {\n "
198
+ + " \" key1\" : \" Value 1\" ,\n "
199
+ + " \" key2\" : \" Value 2\"\n "
200
+ + " },\n "
201
+ + " \" null\" : \"\"\n "
202
+ + " }\n "
203
+ + " }" ,
204
+ Xml . XmlStringBuilder . Step . TWO_SPACES );
205
+ // <data>
206
+ // <string>Example Text</string>
207
+ // <integer>42</integer>
208
+ // <float>3.14</float>
209
+ // <boolean>true</boolean>
210
+ // <date>2025-02-26</date>
211
+ // <time>14:30:00</time>
212
+ // <datetime>2025-02-26T14:30:00Z</datetime>
213
+ // <array>Item 1</array>
214
+ // <array>Item 2</array>
215
+ // <object>
216
+ // <key1>Value 1</key1>
217
+ // <key2>Value 2</key2>
218
+ // </object>
219
+ // <null string="true"/>
220
+ // </data>
221
+
144
222
U . Builder builder = U . objectBuilder()
145
223
.add(" firstName" , " John" )
146
224
.add(" lastName" , " Smith" )
@@ -212,79 +290,6 @@ System.out.println(builder.toXml());
212
290
</root >
213
291
```
214
292
215
- ``` java
216
- String inventory =
217
- " {\n "
218
- + " \" inventory\" : {\n "
219
- + " \" #comment\" : \" Test is test comment\" ,\n "
220
- + " \" book\" : [\n "
221
- + " {\n "
222
- + " \" -year\" : \" 2000\" ,\n "
223
- + " \" title\" : \" Snow Crash\" ,\n "
224
- + " \" author\" : \" Neal Stephenson\" ,\n "
225
- + " \" publisher\" : \" Spectra\" ,\n "
226
- + " \" isbn\" : \" 0553380958\" ,\n "
227
- + " \" price\" : \" 14.95\"\n "
228
- + " },\n "
229
- + " {\n "
230
- + " \" -year\" : \" 2005\" ,\n "
231
- + " \" title\" : \" Burning Tower\" ,\n "
232
- + " \" author\" : [\n "
233
- + " \" Larry Niven\" ,\n "
234
- + " \" Jerry Pournelle\"\n "
235
- + " ],\n "
236
- + " \" publisher\" : \" Pocket\" ,\n "
237
- + " \" isbn\" : \" 0743416910\" ,\n "
238
- + " \" price\" : \" 5.99\"\n "
239
- + " },\n "
240
- + " {\n "
241
- + " \" -year\" : \" 1995\" ,\n "
242
- + " \" title\" : \" Zodiac\" ,\n "
243
- + " \" author\" : \" Neal Stephenson\" ,\n "
244
- + " \" publisher\" : \" Spectra\" ,\n "
245
- + " \" isbn\" : \" 0553573862\" ,\n "
246
- + " \" price\" : \" 7.50\"\n "
247
- + " }\n "
248
- + " ]\n "
249
- + " }\n "
250
- + " }" ;
251
- String title = U . selectToken(U . fromJsonMap(inventory), " //book[@year>2001]/title/text()" );
252
- // "Burning Tower"
253
-
254
- String json =
255
- " {\n "
256
- + " \" Stores\" : [\n "
257
- + " \" Lambton Quay\" ,\n "
258
- + " \" Willis Street\"\n "
259
- + " ],\n "
260
- + " \" Manufacturers\" : [\n "
261
- + " {\n "
262
- + " \" Name\" : \" Acme Co\" ,\n "
263
- + " \" Products\" : [\n "
264
- + " {\n "
265
- + " \" Name\" : \" Anvil\" ,\n "
266
- + " \" Price\" : 50\n "
267
- + " }\n "
268
- + " ]\n "
269
- + " },\n "
270
- + " {\n "
271
- + " \" Name\" : \" Contoso\" ,\n "
272
- + " \" Products\" : [\n "
273
- + " {\n "
274
- + " \" Name\" : \" Elbow Grease\" ,\n "
275
- + " \" Price\" : 99.95\n "
276
- + " },\n "
277
- + " {\n "
278
- + " \" Name\" : \" Headlight Fluid\" ,\n "
279
- + " \" Price\" : 4\n "
280
- + " }\n "
281
- + " ]\n "
282
- + " }\n "
283
- + " ]\n "
284
- + " }" ;
285
- List<String > names = U . selectTokens(U . fromJsonMap(json), " //Products[Price>=50]/Name/text()" );
286
- // [Anvil, Elbow Grease]
287
- ```
288
293
Simplify XML document creation by structuring your code like the final document.
289
294
290
295
This code:
@@ -299,9 +304,11 @@ XmlBuilder builder = XmlBuilder.create("Projects")
299
304
.e(" JetS3t" ). a(" language" , " Java" ). a(" scm" , " CVS" )
300
305
.e(" Location" ). a(" type" , " URL" )
301
306
.t(" https://jets3t.s3.amazonaws.com/index.html" );
307
+ System . out. println(builder. toXml(Xml . XmlStringBuilder . Step . TWO_SPACES ));
308
+ System . out. println(builder. toJson(Json . JsonStringBuilder . Step . TWO_SPACES ));
302
309
```
303
310
304
- Generates the following XML document :
311
+ Generates the following XML and JSON documents :
305
312
306
313
``` xml
307
314
<?xml version =" 1.0" encoding =" UTF-8" ?>
@@ -314,6 +321,28 @@ Generates the following XML document:
314
321
</JetS3t >
315
322
</Projects >
316
323
```
324
+ ``` json
325
+ {
326
+ "Projects" : {
327
+ "underscore-java" : {
328
+ "-language" : " Java" ,
329
+ "-scm" : " SVN" ,
330
+ "Location" : {
331
+ "-type" : " URL" ,
332
+ "#text" : " https://github.com/javadev/underscore-java/"
333
+ }
334
+ },
335
+ "JetS3t" : {
336
+ "-language" : " Java" ,
337
+ "-scm" : " CVS" ,
338
+ "Location" : {
339
+ "-type" : " URL" ,
340
+ "#text" : " https://jets3t.s3.amazonaws.com/index.html"
341
+ }
342
+ }
343
+ }
344
+ }
345
+ ```
317
346
318
347
Underscore-java is a java port of [ Underscore.js] ( https://underscorejs.org/ ) .
319
348
0 commit comments