Comments (6)
I want to disable the type coercion because the value always must be a string for the api.
That sounds like you want to force type coercion, not disable it.
For the general problem you're facing (assembling JSON from dynamic input), shell arrays are your friend. Here's a simplified rewrite of your example, including a numeric value (which you said should be coerced to a string for API consumption):
#!/usr/bin/env bash
INPUT_PARAMETER="
first=Hello World
second=Foo Bar
third=123
"
JO_PARAMETERS=("id=1")
while read -r line; do
if [[ $line =~ (.*)=(.*) ]]; then
key=${BASH_REMATCH[1]}
value=${BASH_REMATCH[2]}
echo ">> key: '${key}' value: '${value}'"
JO_PARAMETERS+=("${key}=$(jo -- -s value="${value}")")
fi
done <<<"${INPUT_PARAMETER}"
jo -p "${JO_PARAMETERS[@]}"
and here's what happens when you run it:
$ bash test.sh
>> key: 'first' value: 'Hello World'
>> key: 'second' value: 'Foo Bar'
>> key: 'third' value: '123'
{
"id": 1,
"first": {
"value": "Hello World"
},
"second": {
"value": "Foo Bar"
},
"third": {
"value": "123"
}
}
from jo.
I don't think we can do that, but this might work for you:
jo -- -s $(echo foo=123)
from jo.
Unfortunately i cannot use that variant because i have nested json objects with whitespaces in the values and that does not work correctly for some reasons.
from jo.
from jo.
Yes, does not work for me. My script looks like this:
#!/usr/bin/env bash
set -o pipefail
set -o nounset
set -o xtrace
INPUT_PARAMETER="
first=Hello World
second=Foo Bar
"
JO_PARAMETERS="id=1"
if [[ "${INPUT_PARAMETER}" == *"="* ]]; then
while IFS= read -r line; do
IFS='=' read -a keyValuePair <<< "${line}"
if [ ! -z "${keyValuePair:-}" ]; then # Ignore empty lines
key=${keyValuePair[0]}
value="${keyValuePair[1]}"
echo ">> key: '${key}' value: '${value}'"
JO_PARAMETERS+="\n${key},value=${value}"
fi
done <<< ${INPUT_PARAMETER}
fi
echo -e "${JO_PARAMETERS}" | jo -p -d,
jo -p -d, ${JO_PARAMETERS}
Compare the output from the last two commands
from jo.
Thanks a lot @gromgit, works like a charm.
from jo.
Related Issues (20)
- Reading words from variable in shell script? HOT 1
- RFE: Do not split quoted keys with -d HOT 2
- Gaps in variable HOT 2
- Delete nested element HOT 5
- Assertion `utf8_validate(str)' failed - again? HOT 9
- Generating JSON and including JSON output from another program appears to result in double encoded JSON? HOT 3
- Suberflous `\` if try to escape `}` in value HOT 8
- feature allow string vals with spaces deep nested HOT 1
- Question: how to produce multiline strings? HOT 2
- UTF-8 crash - `Assertion failed: (utf8_validate(str))` HOT 5
- Passing an empty file with `@` syntax now throws an error on 1.7 HOT 5
- FAIL: tests/jo.test 20 - read json array elements HOT 7
- 1.9 build for Windows missing HOT 1
- jo will drop the trailing newline at the end of file HOT 8
- Dynamic array of nested oneofs HOT 1
- possible bug: use of `-a` on outer command in nested jo fails to render inside object element when space exists in internal object property value HOT 2
- Modifications to GPLv2 license make jo difficult to adopt in enterprise environment HOT 2
- Please support empty array HOT 1
- pass multiple variables to jo? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jo.